What about something like this:
Code:
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);
}




Shitlord by trade and passion. Graphics programmer at Laminar Research.
I write blog posts at feresignum.com