/* * Function: NewWorkQueue * * The queue constructor - semaphores are initialised to match * max number of queue entries. * */ WorkQueue* NewWorkQueue() { WorkQueue* wq = (WorkQueue*)malloc(sizeof(WorkQueue)); if (!wq) { queue_error("NewWorkQueue", "malloc() failed"); return wq; } memset(wq, 0, sizeof *wq); InitializeCriticalSection(&wq->queueLock); wq->workAvailable = newSemaphore(0, WORKQUEUE_SIZE); wq->roomAvailable = newSemaphore(WORKQUEUE_SIZE, WORKQUEUE_SIZE); /* Fail if we were unable to create any of the sync objects. */ if ( NULL == wq->workAvailable || NULL == wq->roomAvailable ) { FreeWorkQueue(wq); return NULL; } return wq; }
int main() { run_sem = newSemaphore(1); run_queue = newQueue(); start_thread(counter); start_thread(printCounter); start_thread(counter2); run(); return 0; }
void init(void) { bufferWrite = newSemaphore(1); bufferNotFull = newSemaphore(8); bufferNotEmpty = newSemaphore(0); }
void init() { balanceLock = newSemaphore(1); }