Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       sem_init - initialize an unnamed semaphore (REALTIME)

SYNOPSIS

       #include <semaphore.h>

       int sem_init(sem_t *sem, int pshared, unsigned value);

DESCRIPTION

       The  sem_init()  function  shall  initialize the unnamed semaphore referred to by sem. The
       value of the initialized  semaphore  shall  be  value.  Following  a  successful  call  to
       sem_init(),  the  semaphore  may be used in subsequent calls to sem_wait(), sem_trywait(),
       sem_post(), and sem_destroy().  This semaphore shall remain usable until the semaphore  is
       destroyed.

       If  the  pshared  argument  has  a  non-zero  value,  then the semaphore is shared between
       processes; in this case, any process that can access the semaphore sem  can  use  sem  for
       performing sem_wait(), sem_trywait(), sem_post(), and sem_destroy() operations.

       Only  sem  itself  may be used for performing synchronization.  The result of referring to
       copies of sem in calls to sem_wait(),  sem_trywait(),  sem_post(),  and  sem_destroy()  is
       undefined.

       If  the  pshared  argument  is  zero,  then the semaphore is shared between threads of the
       process; any thread in this process can use sem for performing sem_wait(),  sem_trywait(),
       sem_post(),  and  sem_destroy() operations. The use of the semaphore by threads other than
       those created in the same process is undefined.

       Attempting to initialize an already initialized semaphore results in undefined behavior.

RETURN VALUE

       Upon successful completion, the sem_init() function shall initialize the semaphore in sem.
       Otherwise, it shall return -1 and set errno to indicate the error.

ERRORS

       The sem_init() function shall fail if:

       EINVAL The value argument exceeds {SEM_VALUE_MAX}.

       ENOSPC A resource required to initialize the semaphore has been exhausted, or the limit on
              semaphores ( {SEM_NSEMS_MAX}) has been reached.

       EPERM  The process lacks the appropriate privileges to initialize the semaphore.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       The sem_init() function is part of the Semaphores option and need not be available on  all
       implementations.

RATIONALE

       Although  this  volume of IEEE Std 1003.1-2001 fails to specify a successful return value,
       it is likely that a later version may require the implementation to return a value of zero
       if the call to sem_init() is successful.

FUTURE DIRECTIONS

       None.

SEE ALSO

       sem_destroy()  ,  sem_post()  ,  sem_timedwait()  ,  sem_trywait() , sem_wait() , the Base
       Definitions volume of IEEE Std 1003.1-2001, <semaphore.h>

COPYRIGHT

       Portions of this text are reprinted and  reproduced  in  electronic  form  from  IEEE  Std
       1003.1,  2003  Edition,  Standard  for Information Technology -- Portable Operating System
       Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003  by
       the  Institute  of  Electrical  and  Electronics Engineers, Inc and The Open Group. In the
       event of any discrepancy between this version and the original IEEE  and  The  Open  Group
       Standard,  the  original  IEEE  and  The  Open Group Standard is the referee document. The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .