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