00001 #ifndef _SEMLIB_H_
00002 #define _SEMLIB_H_
00003
00004 #include <semaphore.h>
00005 #include <errno.h>
00006 #include "objLib.h"
00007
00008 typedef sem_t* SEM_ID;
00009
00010
00011 void semClearCtl();
00012
00013
00014
00015 SEM_ID semCreateNamed(int initialCount, char *name);
00016
00017
00018
00019 SEM_ID semAttachNamed(char *name);
00020
00021
00022 SEM_ID semCCreate(int options, int initialCount);
00023
00024
00025 inline STATUS semGive(SEM_ID semId)
00026 {
00027 return sem_post(semId);
00028 }
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 inline STATUS semTake(SEM_ID semId, int timeout=WAIT_FOREVER)
00043 {
00044 if(timeout == NO_WAIT) return sem_trywait(semId);
00045
00046 while(sem_wait(semId) == -1)
00047 {
00048 if(errno != EINTR) return -1;
00049 if(timeout != WAIT_FOREVER) return -1;
00050 }
00051 return OK;
00052 }
00053
00054
00055 STATUS semDelete(SEM_ID semId);
00056
00057 #endif