PaCO++
0.05
|
00001 #include "paco_marcel.h" 00002 00003 paco_marcel_thread::paco_marcel_thread() 00004 { 00005 } 00006 00007 paco_marcel_thread::~paco_marcel_thread() 00008 { 00009 } 00010 00011 paco_marcel_mutex::paco_marcel_mutex() 00012 { 00013 marcel_mutex_init(&mutex, 0); 00014 } 00015 00016 paco_marcel_mutex::~paco_marcel_mutex() 00017 { 00018 marcel_mutex_destroy(&mutex); 00019 } 00020 00021 void 00022 paco_marcel_mutex::lock() 00023 { 00024 marcel_mutex_lock(&mutex); 00025 } 00026 00027 void 00028 paco_marcel_mutex::unlock() 00029 { 00030 marcel_mutex_unlock(&mutex); 00031 } 00032 00033 00034 paco_marcel_condition::paco_marcel_condition(paco_marcel_mutex* m) 00035 { 00036 mutex = m; 00037 marcel_cond_init(&condition, 0); 00038 } 00039 00040 00041 paco_marcel_condition::~paco_marcel_condition() 00042 { 00043 marcel_cond_destroy(&condition); 00044 } 00045 00046 void 00047 paco_marcel_condition::wait() 00048 { 00049 marcel_cond_wait(&condition, &mutex->mutex); 00050 } 00051 00052 void 00053 paco_marcel_condition::signal() 00054 { 00055 marcel_cond_signal(&condition); 00056 } 00057 00058 paco_mutex* paco_marcel_fabrique::paco_create_mutex() 00059 { 00060 return new paco_marcel_mutex(); 00061 } 00062 00063 paco_condition* paco_marcel_fabrique::paco_create_condition(paco_mutex * mutex) 00064 { 00065 return new paco_marcel_condition((paco_marcel_mutex*) mutex); 00066 } 00067 00068 paco_thread * paco_marcel_fabrique::paco_create_thread(void* (*fn)(void*), void* arg) 00069 { 00070 marcel_attr_t attr; 00071 00072 marcel_attr_init(&attr); 00073 // marcel_attr_setdetachstate(&attr, MARCEL_CREATE_DETACHED ); 00074 00075 paco_marcel_thread * th = new paco_marcel_thread(); 00076 marcel_create(&th->thread, &attr, fn,arg); 00077 padico_tm_thread_givename_tid("PaCO++ thread (joinable)", th->thread); 00078 return th; 00079 } 00080 00081 paco_thread * paco_marcel_fabrique::paco_create_thread(void (*fn)(void*), void* arg) 00082 { 00083 marcel_attr_t attr; 00084 00085 00086 marcel_attr_init(&attr); 00087 marcel_attr_setdetachstate(&attr, MARCEL_CREATE_DETACHED ); 00088 00089 paco_marcel_thread * th = new paco_marcel_thread(); 00090 marcel_create(&th->thread, &attr, (void* (*)(void*))fn,arg); 00091 padico_tm_thread_givename_tid("PaCO++ thread (detached)", th->thread); 00092 return th; 00093 } 00094