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

📄 mutex_alloc.html

📁 sqlite3源码,适合作为嵌入式(embedded)
💻 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. In this case theapplication must supply a custom mutex implementation using the<a href="../c3ref/c_config_getmalloc.html">SQLITE_CONFIG_MUTEX</a> option of the sqlite3_config() functionbefore calling sqlite3_initialize() or any other public sqlite3_function that calls sqlite3_initialize().</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<li>  SQLITE_MUTEX_STATIC_LRU2</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 <a href="../c3ref/c_abort.html">SQLITE_OK</a>upon 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 (for example, Windows 95) do not support the operationimplemented by sqlite3_mutex_try().  On those systems, sqlite3_mutex_try()will always 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>If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), orsqlite3_mutex_leave() is a NULL pointer, then all three routinesbehave as no-ops.</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/12/09 18:44:04 UTC</i></small></div></body></html>

⌨️ 快捷键说明

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