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 #ifndef __THREAD_PTHREAD_H__
00027 #define __THREAD_PTHREAD_H__
00028
00029 #include <cbits/Runnable.h>
00030 #include <cbits/Thread.h>
00031 #include <list>
00032
00033 #ifdef USE_PTHREADS
00034 #include <pthread.h>
00035 #include <sched.h>
00036 #endif
00037
00038
00039 #ifdef BUILD_DLL
00040 #define EXPORT __declspec(dllexport)
00041 #else
00042 #define EXPORT
00043 #endif
00044
00045
00046 namespace cbits
00047 {
00048
00049
00057 class EXPORT Thread_PTHREAD : public virtual Thread
00058 {
00059
00060 public:
00061
00066 Thread_PTHREAD
00067 (
00069 Runnable* r,
00070
00072 const Priority p = DEFAULT_PRIORITY
00073 );
00074
00075
00084 static Thread* get_current_thread();
00085
00086
00091 static void yield();
00092
00093
00098 virtual ~Thread_PTHREAD();
00099
00100
00101 protected:
00102 virtual const bool impl_create_thread( const Priority );
00103 virtual const bool impl_start_thread();
00104 virtual const long impl_get_threadid() const;
00105 virtual void impl_lock_obj() const;
00106 virtual void impl_unlock_obj() const;
00107 virtual void impl_interrupt();
00108 virtual const bool impl_join( const long msec );
00109 virtual void impl_sleep( const long msec );
00110
00111 private:
00112
00119 static void* run_thread
00120 (
00122 void* thread_ptr
00123 );
00124
00125
00129 static void cleanup
00130 (
00132 void* t
00133 );
00134
00135
00142 const long getTid() const;
00143
00144
00148 static std::list<Thread_PTHREAD*> _threads;
00149
00150
00154 static std::list<Thread_PTHREAD*>& getThreadList();
00155
00156
00157 #ifdef USE_PTHREADS
00158
00160 pthread_cond_t _start_cv;
00161
00163 pthread_mutex_t _start_cv_lk;
00164
00169 static pthread_mutex_t _tlist_mutex;
00170
00175 static pthread_mutex_t* getThreadListLock();
00176
00178 pthread_t _thr;
00179
00181 pthread_attr_t _attr;
00182
00184 struct sched_param _tsched;
00185
00187 mutable pthread_mutex_t _lock;
00188 #endif
00189
00191 long _tid;
00192
00193
00194 };
00195
00196 };
00197
00198 #endif
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233