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>&lt;<font class="keyword">class</font> T&gt;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(&amp;attr);00961         pthread_mutexattr_setpshared(&amp;attr, PTHREAD_PROCESS_SHARED);00962         pthread_mutexattr_setrecursive(&amp;attr, PTHREAD_RECURSIVE_ENABLE);00963         pthread_mutex_init(sem, &amp;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 &lt;errno.h&gt;</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)) &lt; 0 &amp;&amp; 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 &lt;synch.h&gt;</font>01009 <font class="preprocessor">#include &lt;errno.h&gt;</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)) &lt; 0 &amp;&amp; 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&amp; mutex;01091   <font class="keyword">public</font>:01092     dbCriticalSection(dbMutex&amp; 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 &gt; 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 + -
显示快捷键?