Man Linux: Main Page and Category List

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 .