SEMAPHORE(2)

NAME
scount, screate, sdelete, ssignal, swait - semaphore operations

SYNOPSIS
#include <gno/gno.h>

int scount (int sem);
int screate (int count);
int sdelete (int sem);
int ssignal (int sem);
int swait (int sem);

DESCRIPTION
screate is used to allocate a semaphore from the kernel semapore manager. Semaphores are the most basic form of interprocess communication (IPC), and these routines provide the power necessary to solve a large number of synchronization and communication problems. (See an Operating Systems text).

The initial count determines how many times swait can be called before processes are blocked. count must non-negative, and is usually set to 1. screate returns a semaphore ID number as an integer. This ID must be used in all the other semaphore calls.

sdelete releases the specified semaphore, and returns to a ready state all processes that were blocked on that semaphore.

swait decrements the value of the semaphore (initially specified by count) by one. If the semaphore count is less than zero, the process is blocked and queued for release by ssignal. This is what is traditionally referred to as a semaphore-down operation.

ssignal increments the semaphore count by one. If the semaphore count is less than zero, ssignal unblocks a process blocked on the semaphore. The selection of the process to be unblocked is arbitrary; FIFO operation is not guaranteed.

scount retuns the current value of the semaphore referred to by sem. Note that depending on this value for synchronization can lead to race conditions.

RETURN VALUE
On success, screate returns the semaphore identifier, scount returns the semaphore value, and sdelete, ssignal, and swait return zero. All functions return -1 and set errno on failure.

BUGS
There is currently no mechanism for deallocating semaphores that are orphaned by abnormal process termination.

HISTORY
These semaphore routines were designed for XINU, written by Douglas Comer.