Exemplo n.º 1
0
/*
 * 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;
}
Exemplo n.º 2
0
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);
}