⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mutex_alloc.html

📁 这是sqlite3.56的文档。拿来给大家阅读使用
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Mutexes</title><style type="text/css">body {    margin: auto;    font-family: "Verdana" "sans-serif";    padding: 8px 1%;}a { color: #45735f }a:visited { color: #734559 }.logo { position:absolute; margin:3px; }.tagline {  float:right;  text-align:right;  font-style:italic;  width:240px;  margin:12px;  margin-top:58px;}.toolbar {  font-variant: small-caps;  text-align: center;  line-height: 1.6em;  margin: 0;  padding:1px 8px;}.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }.toolbar a:visited { color: white; }.toolbar a:hover { color: #80a796; background: white; }.content    { margin: 5%; }.content dt { font-weight:bold; }.content dd { margin-bottom: 25px; margin-left:20%; }.content ul { padding:0px; padding-left: 15px; margin:0px; }/* rounded corners */.se  { background: url(../images/se.png) 100% 100% no-repeat #80a796}.sw  { background: url(../images/sw.png) 0% 100% no-repeat }.ne  { background: url(../images/ne.png) 100% 0% no-repeat }.nw  { background: url(../images/nw.png) 0% 0% no-repeat }</style><meta http-equiv="content-type" content="text/html; charset=UTF-8">  </head><body><div><!-- container div to satisfy validator --><a href="../index.html"><img class="logo" src="../images/SQLite.gif" alt="SQLite Logo" border="0"></a><div><!-- IE hack to prevent disappearing logo--></div><div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div><table width=100% style="clear:both"><tr><td>  <div class="se"><div class="sw"><div class="ne"><div class="nw">  <div class="toolbar">    <a href="../about.html">About</a>    <a href="../sitemap.html">Sitemap</a>    <a href="../docs.html">Documentation</a>    <a href="../download.html">Download</a>    <a href="../copyright.html">License</a>    <a href="../news.html">News</a>    <a href="http://www.sqlite.org/cvstrac/index">Developers</a>    <a href="../support.html">Support</a>  </div></div></div></div></div></td></tr></table>  <a href="intro.html"><h2>SQLite C Interface</h2></a><h2>Mutexes</h2><blockquote><pre>sqlite3_mutex *sqlite3_mutex_alloc(int);void sqlite3_mutex_free(sqlite3_mutex*);void sqlite3_mutex_enter(sqlite3_mutex*);int sqlite3_mutex_try(sqlite3_mutex*);void sqlite3_mutex_leave(sqlite3_mutex*);</pre></blockquote><p>The SQLite core uses these routines for threadsynchronization.  Though they are intended for internaluse by SQLite, code that links against SQLite ispermitted to use any of these routines.</p><p>The SQLite source code contains multiple implementationsof these mutex routines.  An appropriate implementationis selected automatically at compile-time.  The followingimplementations are available in the SQLite core:</p><p><ul><li>   SQLITE_MUTEX_OS2<li>   SQLITE_MUTEX_PTHREAD<li>   SQLITE_MUTEX_W32<li>   SQLITE_MUTEX_NOOP</ul></p><p>The SQLITE_MUTEX_NOOP implementation is a set of routinesthat does no real locking and is appropriate for use ina single-threaded application.  The SQLITE_MUTEX_OS2,SQLITE_MUTEX_PTHREAD, and SQLITE_MUTEX_W32 implementationsare appropriate for use on os/2, unix, and windows.</p><p>If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessormacro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no muteximplementation is included with the library.  Themutex interface routines defined here become externalreferences in the SQLite library for which implementationsmust be provided by the application.  This facility allows anapplication that links against SQLite to provide its own muteximplementation without having to modify the SQLite core.</p><p> The sqlite3_mutex_alloc() routine allocates a newmutex and returns a pointer to it. If it returns NULLthat means that a mutex could not be allocated. SQLitewill unwind its stack and return an error. The argumentto sqlite3_mutex_alloc() is one of these integer constants:</p><p><ul><li>  SQLITE_MUTEX_FAST<li>  SQLITE_MUTEX_RECURSIVE<li>  SQLITE_MUTEX_STATIC_MASTER<li>  SQLITE_MUTEX_STATIC_MEM<li>  SQLITE_MUTEX_STATIC_MEM2<li>  SQLITE_MUTEX_STATIC_PRNG<li>  SQLITE_MUTEX_STATIC_LRU</ul></p><p> The first two constants cause sqlite3_mutex_alloc() to createa new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVEis used but not necessarily so when SQLITE_MUTEX_FAST is used.The mutex implementation does not need to make a distinctionbetween SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it doesnot want to. But SQLite will only request a recursive mutex incases where it really needs one. If a faster non-recursive muteximplementation is available on the host platform, the mutex subsystemmight return such a mutex in response to SQLITE_MUTEX_FAST.</p><p> The other allowed parameters to sqlite3_mutex_alloc() each returna pointer to a static preexisting mutex.  Four static mutexes areused by the current version of SQLite.  Future versions of SQLitemay add additional static mutexes.  Static mutexes are for internaluse by SQLite only.  Applications that use SQLite mutexes shoulduse only the dynamic mutexes returned by SQLITE_MUTEX_FAST orSQLITE_MUTEX_RECURSIVE.</p><p> Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FASTor SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()returns a different mutex on every call. But for the staticmutex types, the same mutex is returned on every call that hasthe same type number.</p><p> The sqlite3_mutex_free() routine deallocates a previouslyallocated dynamic mutex. SQLite is careful to deallocate everydynamic mutex that it allocates. The dynamic mutexes must not be inuse when they are deallocated. Attempting to deallocate a staticmutex results in undefined behavior. SQLite never deallocatesa static mutex.</p><p>The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attemptto enter a mutex. If another thread is already within the mutex,sqlite3_mutex_enter() will block and sqlite3_mutex_try() will returnSQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OKupon successful entry. Mutexes created usingSQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. In such cases the,mutex must be exited an equal number of times before another threadcan enter. If the same thread tries to enter any otherkind of mutex more than once, the behavior is undefined. SQLite will never exhibitsuch behavior in its own use of mutexes.</p><p>Some systems (ex: windows95) do not the operation implemented bysqlite3_mutex_try().  On those systems, sqlite3_mutex_try() willalways return SQLITE_BUSY. The SQLite core only ever usessqlite3_mutex_try() as an optimization so this is acceptable behavior.</p><p> The sqlite3_mutex_leave() routine exits a mutex that waspreviously entered by the same thread. The behavioris undefined if the mutex is not currently entered by thecalling thread or is not currently allocated. SQLite willnever do either.</p><p>See also: <a href="../c3ref/mutex_held.html">sqlite3_mutex_held()</a> and <a href="../c3ref/mutex_held.html">sqlite3_mutex_notheld()</a>.</p><p>See also lists of  <a href="objlist.html">Objects</a>,  <a href="constlist.html">Constants</a>, and  <a href="funclist.html">Functions</a>.</p><hr><small<i>This page last modified 2008/01/31 20:37:13 UTC</i></small></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -