creatsem(2xnx) (XENIX System Compatibility)


creatsem -- (XENIX) create an instance of a binary semaphore

Synopsis

   cc [flag . . . ] flag . . . -lx 
   int creatsem(char *sem_name, int mode); 

Description

creatsem defines a binary semaphore named by sem_name to be used by waitsem and sigsem to manage mutually exclusive access to a resource, shared variable, or critical section of a program. creatsem returns a unique semaphore number, sem_num, which may then be used as the parameter in waitsem and sigsem calls. Semaphores are special files of 0 length. The filename space is used to provide unique identifiers for semaphores. mode sets the accessibility of the semaphore using the same format as file access bits. Access to a semaphore is granted only on the basis of the read access bit; the write and execute bits are ignored.

A semaphore can be operated on only by a synchronizing primitive, such as waitsem or sigsem, by creatsem which initializes it to some value, or by opensem which opens the semaphore for use by a process. Synchronizing primitives are guaranteed to be executed without interruption once started. These primitives are used by associating a semaphore with each resource (including critical code sections) to be protected.

The process controlling the semaphore should issue:

   sem_num = creatsem("semaphore", mode); 

to create, initialize, and open the semaphore for that process. All other processes using the semaphore should issue:

   sem_num = opensem("semaphore"); 

to access the semaphore's identification value. Note that a process cannot open and use a semaphore that has not been initialized by a call to creatsem, nor should a process open a semaphore more than once in one period of execution. Both the creating and opening processes use waitsem and sigsem to use the semaphore sem_num.

Return values

creatsem returns the value -1 if an error occurs. If the semaphore named by sem_name is already open for use by other processes, errno is set to EEXIST. If the file specified exists but is not a semaphore type, errno is set to ENOTNAM. If the semaphore has not been initialized by a call to creatsem, errno is set to EINVAL.

References

opensem(2xnx), sigsem(2xnx), waitsem(2xnx)

Notices

After a creatsem, you must do a waitsem to gain control of a given resource.
30 January 1998
© 1998 The Santa Cruz Operation, Inc. All rights reserved.