PaCO++
0.05
|
00001 #include "paco_pthread.h" 00002 00003 paco_pthread_mutex::paco_pthread_mutex() 00004 { 00005 pthread_mutex_init(&mutex, 0); 00006 } 00007 00008 paco_pthread_mutex::~paco_pthread_mutex() 00009 { 00010 pthread_mutex_destroy(&mutex); 00011 } 00012 00013 void 00014 paco_pthread_mutex::lock() 00015 { 00016 pthread_mutex_lock(&mutex); 00017 } 00018 00019 void 00020 paco_pthread_mutex::unlock() 00021 { 00022 pthread_mutex_unlock(&mutex); 00023 } 00024 00025 00026 paco_pthread_condition::paco_pthread_condition(paco_pthread_mutex* m) 00027 { 00028 mutex = m; 00029 pthread_cond_init(&condition, 0); 00030 } 00031 00032 00033 paco_pthread_condition::~paco_pthread_condition() 00034 { 00035 pthread_cond_destroy(&condition); 00036 } 00037 00038 void 00039 paco_pthread_condition::wait() 00040 { 00041 pthread_cond_wait(&condition, &mutex->mutex); 00042 } 00043 00044 void 00045 paco_pthread_condition::signal() 00046 { 00047 pthread_cond_signal(&condition); 00048 } 00049 00050 00051 paco_mutex* paco_pthread_fabrique::paco_create_mutex() 00052 { 00053 return new paco_pthread_mutex(); 00054 } 00055 00056 paco_condition* paco_pthread_fabrique::paco_create_condition(paco_mutex * mutex) 00057 { 00058 return new paco_pthread_condition((paco_pthread_mutex*) mutex); 00059 } 00060 00061 paco_thread * paco_pthread_fabrique::paco_create_thread(void* (*fn)(void*), void* arg) 00062 { 00063 pthread_attr_t attr; 00064 00065 pthread_attr_init(&attr); 00066 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED ); 00067 00068 paco_pthread_thread * th = new paco_pthread_thread(); 00069 pthread_create(&th->thread, &attr, fn,arg); 00070 return th; 00071 }