Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

pseudosem.h

00001 // Copyright (C) 2001 Jean-Marc Valin
00002 
00003 #include <pthread.h>
00004 
00005 typedef struct pseudosem_t {
00006    pthread_mutex_t mutex;
00007    pthread_cond_t cond;
00008    int val;
00009 } pseudosem_t;
00010 
00011 inline void pseudosem_init(pseudosem_t *sem, int dummy, int _val)
00012 {
00013    sem->val = _val;
00014    pthread_mutex_init(&sem->mutex, NULL);
00015    pthread_cond_init(&sem->cond, NULL);
00016 }
00017 
00018 inline void pseudosem_destroy(pseudosem_t *sem)
00019 {
00020    pthread_mutex_destroy(&sem->mutex);
00021    pthread_cond_destroy(&sem->cond);
00022 }
00023 
00024 inline void pseudosem_wait(pseudosem_t *sem)
00025 {
00026    pthread_mutex_lock(&sem->mutex);
00027    if (!sem->val)
00028    {
00029       //cerr << "waiting\n";
00030       pthread_cond_wait(&sem->cond, &sem->mutex);
00031       //cerr << "end waiting\n";
00032    }
00033    sem->val--;
00034    pthread_mutex_unlock(&sem->mutex);
00035 }
00036 
00037 inline void pseudosem_post(pseudosem_t *sem)
00038 {
00039    //cerr << "locking for post\n";
00040    pthread_mutex_lock(&sem->mutex);
00041    //cerr << "locked for post\n";
00042    pthread_cond_signal(&sem->cond);
00043    sem->val++;
00044    pthread_mutex_unlock(&sem->mutex);
00045 }
00046 
00047 #ifdef HAVE_SEMAPHORE_H
00048 #include <semaphore.h>
00049 #define pseudosem_t sem_t
00050 #define pseudosem_post sem_post
00051 #define pseudosem_wait sem_wait
00052 #define pseudosem_init sem_init
00053 #define pseudosem_destroy sem_destroy
00054 #endif

Generated on Wed Oct 5 14:28:56 2005 for FlowDesigner by  doxygen 1.4.4