PaCO++  0.05
paco_thread.h
Go to the documentation of this file.
00001 #ifndef __PACO_thread__
00002 #define __PACO_thread__
00003 
00004 #include "FabriqueManagerTpl.h"
00005 #include <string>
00006 #include <map>
00007 #include <iostream>
00008 
00009 using namespace std;
00010 
00012 
00013 class paco_mutex 
00014 {
00015  public:
00016   virtual ~paco_mutex() {};
00017   
00018   virtual void lock() = 0;
00019   virtual void unlock() = 0;
00020 };
00021 
00023 
00024 class paco_condition
00025 {
00026  public:
00027   virtual ~paco_condition() {};
00028 
00029   virtual void wait() = 0;
00030   virtual void signal() = 0;
00031 };
00032 
00034 
00035 class paco_thread
00036 {
00037  public:
00038   virtual ~paco_thread() {};
00039   virtual void detach() {};  
00040 };
00041 
00045 
00047 // Abstract class to be implemeted by each fabrique
00048 class paco_fabrique_thread {
00049 
00050 public:
00051   virtual ~paco_fabrique_thread() {}
00052 
00053   virtual paco_mutex* paco_create_mutex()=0;
00054   virtual paco_condition* paco_create_condition(paco_mutex * mutex)=0;
00055   // Create a joinable thread
00056   virtual paco_thread * paco_create_thread(void* (*fn)(void*), void* arg = NULL)=0; 
00057   // create a detached thread
00058   virtual paco_thread * paco_create_thread(void (*fn)(void*), void* arg = NULL)=0;
00059 };
00060 
00061 // The thread fabrique
00062 typedef paco_fabrique_manager_tpl<paco_fabrique_thread> paco_fabrique_manager_thread;
00063 
00064 #endif