To initialize a SignalSemaphore structure use the InitSemaphore() function. This function initializes the list structure and the nesting and queue counters. It does not change the semaphore's name or priority fields. This fragment creates and initializes a semaphore for a data item such as the SharedList structure above. struct SharedList *slist; if (slist=(struct SharedList *) AllocMem(sizeof(struct SharedList),MEMF_PUBLIC|MEMF_CLEAR)) { NewList(&slist->sl_List); /* Initialize the MinList */ InitSemaphore((struct SignalSemaphore *)slist); /* And initialize the semaphore */ /* The semaphore can now be used. */ } else printf("Can't allocate structure\n");