00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __omnithread_posix_h_
00028 #define __omnithread_posix_h_
00029
00030 #if defined(__alpha__) && defined(__osf1__) || defined(__hpux__)
00031
00032 #ifndef EXC_HANDLING
00033 #define EXC_HANDLING
00034 #endif
00035 #endif
00036
00037 #ifndef __POSIX_NT__
00038 # include <pthread.h>
00039 #else
00040 # ifndef WIN32_LEAN_AND_MEAN
00041 # define WIN32_LEAN_AND_MEAN
00042 # define OMNI_DEFINED_WIN32_LEAN_AND_MEAN
00043 # endif
00044 # include <windows.h>
00045 # include "pthread_nt.h"
00046 # ifdef OMNI_DEFINED_WIN32_LEAN_AND_MEAN
00047 # undef WIN32_LEAN_AND_MEAN
00048 # undef OMNI_DEFINED_WIN32_LEAN_AND_MEAN
00049 # endif
00050 #endif
00051
00052 extern "C" void* omni_thread_wrapper(void* ptr);
00053
00054 #define OMNI_MUTEX_IMPLEMENTATION \
00055 pthread_mutex_t posix_mutex;
00056
00057 #define OMNI_MUTEX_LOCK_IMPLEMENTATION \
00058 pthread_mutex_lock(&posix_mutex);
00059
00060 #define OMNI_MUTEX_UNLOCK_IMPLEMENTATION \
00061 pthread_mutex_unlock(&posix_mutex);
00062
00063 #define OMNI_CONDITION_IMPLEMENTATION \
00064 pthread_cond_t posix_cond;
00065
00066 #define OMNI_SEMAPHORE_IMPLEMENTATION \
00067 omni_mutex m; \
00068 omni_condition c; \
00069 int value;
00070
00071 #define OMNI_THREAD_IMPLEMENTATION \
00072 pthread_t posix_thread; \
00073 static int posix_priority(priority_t); \
00074 friend void* omni_thread_wrapper(void* ptr);
00075
00076 #endif