|
1 /* |
|
2 ** 2007 August 28 |
|
3 ** |
|
4 ** The author disclaims copyright to this source code. In place of |
|
5 ** a legal notice, here is a blessing: |
|
6 ** |
|
7 ** May you do good and not evil. |
|
8 ** May you find forgiveness for yourself and forgive others. |
|
9 ** May you share freely, never taking more than you give. |
|
10 ** |
|
11 ************************************************************************* |
|
12 ** |
|
13 ** This file contains the common header for all mutex implementations. |
|
14 ** The sqliteInt.h header #includes this file so that it is available |
|
15 ** to all source files. We break it out in an effort to keep the code |
|
16 ** better organized. |
|
17 ** |
|
18 ** NOTE: source files should *not* #include this header file directly. |
|
19 ** Source files should #include the sqliteInt.h file and let that file |
|
20 ** include this one indirectly. |
|
21 ** |
|
22 ** $Id: mutex.h,v 1.9 2008/10/07 15:25:48 drh Exp $ |
|
23 */ |
|
24 |
|
25 |
|
26 /* |
|
27 ** Figure out what version of the code to use. The choices are |
|
28 ** |
|
29 ** SQLITE_MUTEX_OMIT No mutex logic. Not even stubs. The |
|
30 ** mutexes implemention cannot be overridden |
|
31 ** at start-time. |
|
32 ** |
|
33 ** SQLITE_MUTEX_NOOP For single-threaded applications. No |
|
34 ** mutual exclusion is provided. But this |
|
35 ** implementation can be overridden at |
|
36 ** start-time. |
|
37 ** |
|
38 ** SQLITE_MUTEX_PTHREADS For multi-threaded applications on Unix. |
|
39 ** |
|
40 ** SQLITE_MUTEX_W32 For multi-threaded applications on Win32. |
|
41 ** |
|
42 ** SQLITE_MUTEX_OS2 For multi-threaded applications on OS/2. |
|
43 */ |
|
44 #if !SQLITE_THREADSAFE |
|
45 # define SQLITE_MUTEX_OMIT |
|
46 #endif |
|
47 #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP) |
|
48 # if SQLITE_OS_UNIX |
|
49 # define SQLITE_MUTEX_PTHREADS |
|
50 # elif SQLITE_OS_WIN |
|
51 # define SQLITE_MUTEX_W32 |
|
52 # elif SQLITE_OS_OS2 |
|
53 # define SQLITE_MUTEX_OS2 |
|
54 # else |
|
55 # define SQLITE_MUTEX_NOOP |
|
56 # endif |
|
57 #endif |
|
58 |
|
59 #ifdef SQLITE_MUTEX_OMIT |
|
60 /* |
|
61 ** If this is a no-op implementation, implement everything as macros. |
|
62 */ |
|
63 #define sqlite3_mutex_alloc(X) ((sqlite3_mutex*)8) |
|
64 #define sqlite3_mutex_free(X) |
|
65 #define sqlite3_mutex_enter(X) |
|
66 #define sqlite3_mutex_try(X) SQLITE_OK |
|
67 #define sqlite3_mutex_leave(X) |
|
68 #define sqlite3_mutex_held(X) 1 |
|
69 #define sqlite3_mutex_notheld(X) 1 |
|
70 #define sqlite3MutexAlloc(X) ((sqlite3_mutex*)8) |
|
71 #define sqlite3MutexInit() SQLITE_OK |
|
72 #define sqlite3MutexEnd() |
|
73 #endif /* defined(SQLITE_OMIT_MUTEX) */ |