sync_8h-source.html
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 1,178 行 · 第 1/4 页
HTML
1,178 行
00878 <font class="keyword">enum</font> initializationStatus { 00879 InitializationError, 00880 AlreadyInitialized,00881 NotYetInitialized00882 };00883 initializationStatus initialize(<font class="keywordtype">char</font> <font class="keyword">const</font>* name);00884 <font class="keywordtype">void</font> done(); 00885 <font class="keywordtype">bool</font> close();00886 <font class="keywordtype">void</font> erase();00887 };00888 00889 00890 <font class="keyword">class </font>dbSemaphore { 00891 <font class="keywordtype">int</font> s;00892 <font class="keyword">public</font>:00893 <font class="keywordtype">bool</font> wait(<font class="keywordtype">unsigned</font> msec = INFINITE);00894 <font class="keywordtype">void</font> signal(<font class="keywordtype">unsigned</font> inc = 1);00895 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, <font class="keywordtype">unsigned</font> initValue = 0);00896 <font class="keywordtype">void</font> reset();00897 <font class="keywordtype">void</font> close();00898 <font class="keywordtype">void</font> erase();00899 };00900 00901 <font class="keyword">class </font>dbEvent { 00902 <font class="keywordtype">int</font> e;00903 <font class="keyword">public</font>:00904 <font class="keywordtype">bool</font> wait(<font class="keywordtype">unsigned</font> msec = INFINITE);00905 <font class="keywordtype">void</font> signal();00906 <font class="keywordtype">void</font> reset();00907 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, <font class="keywordtype">bool</font> signaled = <font class="keyword">false</font>);00908 <font class="keywordtype">void</font> close();00909 <font class="keywordtype">void</font> erase();00910 };00911 00912 00913 <font class="keyword">class </font>dbSharedMemory { 00914 <font class="keyword">protected</font>:00915 <font class="keywordtype">char</font>* ptr;00916 <font class="keywordtype">int</font> shm;00917 00918 <font class="keyword">public</font>:00919 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, size_t size); 00920 <font class="keywordtype">void</font> close();00921 <font class="keywordtype">void</font> erase(); 00922 <font class="keywordtype">char</font>* get_base() { 00923 <font class="keywordflow">return</font> ptr;00924 }00925 };00926 00927 <font class="keyword">template</font><<font class="keyword">class</font> T>00928 <font class="keyword">class </font>dbSharedObject : <font class="keyword">public</font> dbSharedMemory { 00929 <font class="keyword">public</font>:00930 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font>* name) { 00931 <font class="keywordflow">return</font> dbSharedMemory::open(name, <font class="keyword">sizeof</font>(T));00932 }00933 T* get() { <font class="keywordflow">return</font> (T*)ptr; }00934 };00935 00936 <font class="preprocessor">#endif</font>00937 <font class="preprocessor"></font>00938 <font class="preprocessor">#if defined(__QNX__)</font>00939 <font class="preprocessor"></font>00940 <font class="keyword">typedef</font> pthread_mutext_t sharedsem_t;00941 00942 <font class="keyword">class </font>dbGlobalCriticalSection { 00943 pthread_mutexattr_t attr;00944 sharedsem_t* sem;00945 <font class="keyword">public</font>:00946 <font class="keywordtype">void</font> enter() {00947 <font class="keywordtype">int</font> rc = pthread_mutex_lock(sem);00948 assert(rc == 0);00949 }00950 <font class="keywordtype">void</font> leave() { 00951 <font class="keywordtype">int</font> rc = pthread_mutex_unlock(sem);00952 assert(rc == 0);00953 }00954 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>*, sharedsem_t* shr) { 00955 sem = shr;00956 <font class="keywordflow">return</font> <font class="keyword">true</font>;00957 }00958 <font class="keywordtype">bool</font> create(<font class="keywordtype">char</font> <font class="keyword">const</font>*, sharedsem_t* shr) { 00959 sem = shr;00960 pthread_mutexattr_init(&attr);00961 pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);00962 pthread_mutexattr_setrecursive(&attr, PTHREAD_RECURSIVE_ENABLE);00963 pthread_mutex_init(sem, &attr);00964 <font class="keywordflow">return</font> <font class="keyword">true</font>;00965 }00966 <font class="keywordtype">void</font> close() {}00967 <font class="keywordtype">void</font> erase() {00968 pthread_mutex_destroy(sem);00969 }00970 };00971 00972 00973 <font class="preprocessor">#elif defined(__osf__)</font>00974 <font class="preprocessor"></font>00975 <font class="preprocessor">#include <errno.h></font>00976 <font class="keyword">typedef</font> msemaphore sharedsem_t;00977 00978 <font class="keyword">class </font>dbGlobalCriticalSection { 00979 sharedsem_t* sem;00980 <font class="keyword">public</font>:00981 <font class="keywordtype">void</font> enter() { 00982 <font class="keywordtype">int</font> rc;00983 <font class="keywordflow">while</font> ((rc = msem_lock(sem, 0)) < 0 && errno == EINTR);00984 assert(rc == 0);00985 }00986 <font class="keywordtype">void</font> leave() { 00987 <font class="keywordtype">int</font> rc = msem_unlock(sem, 0);00988 assert(rc == 0); 00989 }00990 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>*, sharedsem_t* shr) { 00991 sem = shr;00992 <font class="keywordflow">return</font> <font class="keyword">true</font>;00993 }00994 <font class="keywordtype">bool</font> create(<font class="keywordtype">char</font> <font class="keyword">const</font>*, sharedsem_t* shr) { 00995 sem = shr;00996 msem_init(shr, MSEM_UNLOCKED);00997 <font class="keywordflow">return</font> <font class="keyword">true</font>;00998 }00999 <font class="keywordtype">void</font> close() {}01000 <font class="keywordtype">void</font> erase() {01001 msem_remove(sem);01002 }01003 };01004 01005 01006 <font class="preprocessor">#elif defined(__sun)</font>01007 <font class="preprocessor"></font>01008 <font class="preprocessor">#include <synch.h></font>01009 <font class="preprocessor">#include <errno.h></font>01010 <font class="keyword">typedef</font> sema_t sharedsem_t;01011 01012 <font class="keyword">class </font>dbGlobalCriticalSection { 01013 sharedsem_t* sem;01014 <font class="keyword">public</font>:01015 <font class="keywordtype">void</font> enter() { 01016 <font class="keywordtype">int</font> rc;01017 <font class="keywordflow">while</font> ((rc = sema_wait(sem)) < 0 && errno == EINTR);01018 assert(rc == 0);01019 }01020 <font class="keywordtype">void</font> leave() { 01021 <font class="keywordtype">int</font> rc = sema_post(sem);01022 assert(rc == 0);01023 }01024 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>*, sharedsem_t* shr) { 01025 sem = shr;01026 <font class="keywordflow">return</font> <font class="keyword">true</font>;01027 }01028 <font class="keywordtype">bool</font> create(<font class="keywordtype">char</font> <font class="keyword">const</font>*, sharedsem_t* shr) { 01029 sem = shr;01030 <font class="keywordflow">return</font> sema_init(shr, 1, USYNC_PROCESS, NULL) == 0;01031 }01032 <font class="keywordtype">void</font> close() {}01033 <font class="keywordtype">void</font> erase() {01034 sema_destroy(sem);01035 }01036 };01037 01038 <font class="preprocessor">#elif defined(USE_POSIX_API)</font>01039 <font class="preprocessor"></font>01040 <font class="keyword">typedef</font> sem_t sharedsem_t;01041 01042 <font class="keyword">class </font>dbGlobalCriticalSection { 01043 sharedsem_t* sem;01044 01045 <font class="keyword">public</font>:01046 <font class="keywordtype">void</font> enter() { 01047 <font class="keywordtype">int</font> rc = sem_wait(sem);01048 assert(rc == 0);01049 }01050 <font class="keywordtype">void</font> leave() { 01051 <font class="keywordtype">int</font> rc = sem_post(sem);01052 assert(rc == 0);01053 }01054 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, sharedsem_t* shr) { 01055 sem = shr;01056 <font class="keywordflow">return</font> <font class="keyword">true</font>;01057 }01058 <font class="keywordtype">bool</font> create(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, sharedsem_t* shr) { 01059 sem = shr;01060 <font class="keywordflow">return</font> sem_init(sem, 1, 1) == 0;01061 }01062 <font class="keywordtype">void</font> close() {}01063 <font class="keywordtype">void</font> erase() { 01064 sem_destroy(sem);01065 }01066 };01067 01068 <font class="preprocessor">#else</font>01069 <font class="preprocessor"></font>01070 <font class="keyword">typedef</font> <font class="keywordtype">long</font> sharedsem_t;01071 01072 <font class="keyword">class </font>dbGlobalCriticalSection { 01073 <font class="keywordtype">int</font> semid;01074 sharedsem_t* count;01075 01076 <font class="keyword">public</font>:01077 <font class="keywordtype">void</font> enter(); 01078 <font class="keywordtype">void</font> leave();01079 <font class="keywordtype">bool</font> open(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, sharedsem_t* shr);01080 <font class="keywordtype">bool</font> create(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, sharedsem_t* shr);01081 <font class="keywordtype">void</font> close() {}01082 <font class="keywordtype">void</font> erase();01083 };01084 <font class="preprocessor">#endif</font>01085 <font class="preprocessor"></font>01086 <font class="preprocessor">#endif</font>01087 <font class="preprocessor"></font>01088 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbCriticalSection { 01089 <font class="keyword">private</font>:01090 dbMutex& mutex;01091 <font class="keyword">public</font>:01092 dbCriticalSection(dbMutex& guard) : mutex(guard) {01093 mutex.lock();01094 }01095 ~dbCriticalSection() { 01096 mutex.unlock();01097 }01098 };01099 01100 <font class="preprocessor">#define SMALL_BUF_SIZE 1024</font>01101 <font class="preprocessor"></font>01102 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbSmallBuffer { 01103 <font class="keyword">protected</font>:01104 <font class="keywordtype">char</font>* buf;01105 <font class="keywordtype">char</font> smallBuf[SMALL_BUF_SIZE];01106 01107 <font class="keyword">public</font>:01108 dbSmallBuffer(size_t size) { 01109 <font class="keywordflow">if</font> (size > SMALL_BUF_SIZE) { 01110 buf = <font class="keyword">new</font> <font class="keywordtype">char</font>[size];01111 } <font class="keywordflow">else</font> { 01112 buf = smallBuf;01113 }01114 }01115 01116 operator char*() { <font class="keywordflow">return</font> buf; }01117 <font class="keywordtype">char</font>* base() { <font class="keywordflow">return</font> buf; }01118 01119 ~dbSmallBuffer() { 01120 <font class="keywordflow">if</font> (buf != smallBuf) { 01121 <font class="keyword">delete</font>[] buf;01122 }01123 }01124 };01125 01126 01127 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbPooledThread { 01128 <font class="keyword">private</font>:01129 <font class="keyword">friend</font> <font class="keyword">class </font>dbThreadPool;01130 01131 dbThread thread;01132 dbThreadPool* pool;01133 dbPooledThread* next;01134 dbThread::thread_proc_t f;01135 <font class="keywordtype">void</font>* arg;01136 <font class="keywordtype">bool</font> running;01137 dbLocalSemaphore startSem;01138 dbLocalSemaphore readySem;01139 01140 <font class="keyword">static</font> <font class="keywordtype">void</font> thread_proc pooledThreadFunc(<font class="keywordtype">void</font>* arg);01141 01142 <font class="keywordtype">void</font> run();01143 <font class="keywordtype">void</font> stop();01144 01145 dbPooledThread(dbThreadPool* threadPool); 01146 ~dbPooledThread(); 01147 };01148 01149 <font class="keyword">class </font>FASTDB_DLL_ENTRY dbThreadPool { 01150 <font class="keyword">friend</font> <font class="keyword">class </font>dbPooledThread;01151 dbPooledThread* freeThreads;01152 dbMutex mutex;01153 01154 <font class="keyword">public</font>:01155 dbPooledThread* create(dbThread::thread_proc_t f, <font class="keywordtype">void</font>* arg);01156 <font class="keywordtype">void</font> join(dbPooledThread* thr);01157 dbThreadPool();01158 ~dbThreadPool();01159 }; 01160 01161 <font class="preprocessor">#endif</font>01162 <font class="preprocessor"></font>01163 </pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:29 2002 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.15 </small></address></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?