PaCO++  0.05
paco_marcel.h
Go to the documentation of this file.
00001 #include "paco_thread.h"
00002 
00003 extern "C" {
00004 #include <Padico/PM2.h>
00005 }
00006 
00007 class paco_marcel_mutex; // forward declaration
00008 
00009 class paco_marcel_condition : public paco_condition
00010 {
00011  public:
00012   paco_marcel_condition(paco_marcel_mutex* m);
00013   ~paco_marcel_condition();
00014 
00015   void wait();
00016   void signal();
00017 
00018  private:
00019   marcel_cond_t condition;
00020   paco_marcel_mutex * mutex;
00021 };
00022 
00023 
00024 class paco_marcel_mutex : public paco_mutex
00025 {
00026 
00027 public:
00028   paco_marcel_mutex();
00029   ~paco_marcel_mutex();
00030   
00031   void lock();
00032   void unlock();
00033 
00034 private:
00035   marcel_mutex_t mutex;
00036 
00037   friend void paco_marcel_condition::wait();
00038 };
00039 
00040 class paco_marcel_fabrique : virtual public paco_fabrique_thread {
00041 
00042 public:
00043   paco_mutex* paco_create_mutex();
00044   paco_condition* paco_create_condition(paco_mutex * mutex);
00045   // Create a joinable thread
00046   paco_thread * paco_create_thread(void* (*fn)(void*), void* arg = NULL);
00047   // Create a detach thread
00048   paco_thread * paco_create_thread(void (*fn)(void*), void* arg = NULL);
00049 };
00050 
00051 class paco_marcel_thread : public paco_thread
00052 {
00053 public:
00054   paco_marcel_thread();
00055   virtual ~paco_marcel_thread();
00056   
00057 private:
00058   marcel_t thread;
00059 
00060   friend paco_thread * paco_marcel_fabrique::paco_create_thread(void* (*fn)(void*), void* arg = NULL);
00061   friend paco_thread * paco_marcel_fabrique::paco_create_thread(void (*fn)(void*), void* arg = NULL);
00062 };