PaCO++  0.05
paco_pthread.cc
Go to the documentation of this file.
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 }