typedef int* sempahore_t;
semaphore_t semaphoreCreate()
{
semaphore_t semaphore = malloc(sizeof(semaphore_t));
*semaphore = 0;
return semaphore;
}
void semaphoreDestroy(semaphore_t semaphore)
{
// You could try to lock the semaphore here and only destroy it once you obtained the lock
free(semaphore);
}
char semaphoreLocked(semaphore_t semaphore)
{
return (*semaphore == 0);
}
void semaphoreLock(semaphore_t semaphore)
{
*semaphore = 0;
wait(-2);
*semaphore = 1;
}
void main()
{
semaphore_t semaphore = semaphoreCreate();
semaphoreLock(semaphore);
while(semaphoreLocked(semaphore))
wait(1);
semaphoreDestroy(semaphore);
}