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

📄 mutex_noop.c

📁 sqlite的最新源码 This ZIP archive contains preprocessed C code for the SQLite library as individual sour
💻 C
字号:
/*** 2008 October 07**** The author disclaims copyright to this source code.  In place of** a legal notice, here is a blessing:****    May you do good and not evil.**    May you find forgiveness for yourself and forgive others.**    May you share freely, never taking more than you give.***************************************************************************** This file contains the C functions that implement mutexes.**** This implementation in this file does not provide any mutual** exclusion and is thus suitable for use only in applications** that use SQLite in a single thread.  The routines defined** here are place-holders.  Applications can substitute working** mutex routines at start-time using the****     sqlite3_config(SQLITE_CONFIG_MUTEX,...)**** interface.**** If compiled with SQLITE_DEBUG, then additional logic is inserted** that does error checking on mutexes to make sure they are being** called correctly.**** $Id: mutex_noop.c,v 1.2 2008/10/15 19:03:03 drh Exp $*/#include "sqliteInt.h"#if defined(SQLITE_MUTEX_NOOP) && !defined(SQLITE_DEBUG)/*** Stub routines for all mutex methods.**** This routines provide no mutual exclusion or error checking.*/static int noopMutexHeld(sqlite3_mutex *p){ return 1; }static int noopMutexNotheld(sqlite3_mutex *p){ return 1; }static int noopMutexInit(void){ return SQLITE_OK; }static int noopMutexEnd(void){ return SQLITE_OK; }static sqlite3_mutex *noopMutexAlloc(int id){ return (sqlite3_mutex*)8; }static void noopMutexFree(sqlite3_mutex *p){ return; }static void noopMutexEnter(sqlite3_mutex *p){ return; }static int noopMutexTry(sqlite3_mutex *p){ return SQLITE_OK; }static void noopMutexLeave(sqlite3_mutex *p){ return; }sqlite3_mutex_methods *sqlite3DefaultMutex(void){  static sqlite3_mutex_methods sMutex = {    noopMutexInit,    noopMutexEnd,    noopMutexAlloc,    noopMutexFree,    noopMutexEnter,    noopMutexTry,    noopMutexLeave,    noopMutexHeld,    noopMutexNotheld  };  return &sMutex;}#endif /* defined(SQLITE_MUTEX_NOOP) && !defined(SQLITE_DEBUG) */#if defined(SQLITE_MUTEX_NOOP) && defined(SQLITE_DEBUG)/*** In this implementation, error checking is provided for testing** and debugging purposes.  The mutexes still do not provide any** mutual exclusion.*//*** The mutex object*/struct sqlite3_mutex {  int id;     /* The mutex type */  int cnt;    /* Number of entries without a matching leave */};/*** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are** intended for use inside assert() statements.*/static int debugMutexHeld(sqlite3_mutex *p){  return p==0 || p->cnt>0;}static int debugMutexNotheld(sqlite3_mutex *p){  return p==0 || p->cnt==0;}/*** Initialize and deinitialize the mutex subsystem.*/static int debugMutexInit(void){ return SQLITE_OK; }static int debugMutexEnd(void){ return SQLITE_OK; }/*** The sqlite3_mutex_alloc() routine allocates a new** mutex and returns a pointer to it.  If it returns NULL** that means that a mutex could not be allocated. */static sqlite3_mutex *debugMutexAlloc(int id){  static sqlite3_mutex aStatic[6];  sqlite3_mutex *pNew = 0;  switch( id ){    case SQLITE_MUTEX_FAST:    case SQLITE_MUTEX_RECURSIVE: {      pNew = sqlite3Malloc(sizeof(*pNew));      if( pNew ){        pNew->id = id;        pNew->cnt = 0;      }      break;    }    default: {      assert( id-2 >= 0 );      assert( id-2 < sizeof(aStatic)/sizeof(aStatic[0]) );      pNew = &aStatic[id-2];      pNew->id = id;      break;    }  }  return pNew;}/*** This routine deallocates a previously allocated mutex.*/static void debugMutexFree(sqlite3_mutex *p){  assert( p->cnt==0 );  assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );  sqlite3_free(p);}/*** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt** to enter a mutex.  If another thread is already within the mutex,** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK** upon successful entry.  Mutexes created using SQLITE_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 thread** can enter.  If the same thread tries to enter any other kind of mutex** more than once, the behavior is undefined.*/static void debugMutexEnter(sqlite3_mutex *p){  assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(p) );  p->cnt++;}static int debugMutexTry(sqlite3_mutex *p){  assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(p) );  p->cnt++;  return SQLITE_OK;}/*** The sqlite3_mutex_leave() routine exits a mutex that was** previously entered by the same thread.  The behavior** is undefined if the mutex is not currently entered or** is not currently allocated.  SQLite will never do either.*/static void debugMutexLeave(sqlite3_mutex *p){  assert( debugMutexHeld(p) );  p->cnt--;  assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(p) );}sqlite3_mutex_methods *sqlite3DefaultMutex(void){  static sqlite3_mutex_methods sMutex = {    debugMutexInit,    debugMutexEnd,    debugMutexAlloc,    debugMutexFree,    debugMutexEnter,    debugMutexTry,    debugMutexLeave,    debugMutexHeld,    debugMutexNotheld  };  return &sMutex;}#endif /* defined(SQLITE_MUTEX_NOOP) && defined(SQLITE_DEBUG) */

⌨️ 快捷键说明

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