CINXE.COM
sem_init
<html> <head> <title>sem_init</title> <META NAME="KEYWORDS" CONTENT="sem_init"> </head> <body BGCOLOR="#ffffff" LINK="#0000ff" VLINK="#0000ff" ALINK="#0000ff" TEXT="#000000"> <center> <h1><b>sem_init</b></h1></center> <PRE> <STRONG><A HREF="/man3/SEM_INIT">SEM_INIT(3)</A></STRONG> Linux Programmer's Manual <STRONG><A HREF="/man3/SEM_INIT">SEM_INIT(3)</A></STRONG> NAME sem_init - initialize an unnamed semaphore SYNOPSIS #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); Link with -pthread. DESCRIPTION sem_init() initializes the unnamed semaphore at the address pointed to by sem. The value argument specifies the initial value for the sema- phore. The pshared argument indicates whether this semaphore is to be shared between the threads of a process, or between processes. If pshared has the value 0, then the semaphore is shared between the threads of a process, and should be located at some address that is visible to all threads (e.g., a global variable, or a variable allo- cated dynamically on the heap). If pshared is nonzero, then the semaphore is shared between processes, and should be located in a region of shared memory (see <STRONG><A HREF="/man3/shm_open">shm_open(3)</A></STRONG>, <STRONG><A HREF="/man2/mmap">mmap(2)</A></STRONG>, and <STRONG><A HREF="/man2/shmget">shmget(2)</A></STRONG>). (Since a child created by <STRONG><A HREF="/man2/fork">fork(2)</A></STRONG> inherits its parent's memory mappings, it can also access the semaphore.) Any process that can access the shared memory region can operate on the semaphore using <STRONG><A HREF="/man3/sem_post">sem_post(3)</A></STRONG>, <STRONG><A HREF="/man3/sem_wait">sem_wait(3)</A></STRONG>, and so on. Initializing a semaphore that has already been initialized results in undefined behavior. RETURN VALUE sem_init() returns 0 on success; on error, -1 is returned, and errno is set to indicate the error. ERRORS EINVAL value exceeds SEM_VALUE_MAX. ENOSYS pshared is nonzero, but the system does not support process- shared semaphores (see <STRONG><A HREF="/man7/sem_overview">sem_overview(7)</A></STRONG>). ATTRIBUTES For an explanation of the terms used in this section, see at- <STRONG><A HREF="/man7/tributes">tributes(7)</A></STRONG>. +-----------+---------------+---------+ |Interface | Attribute | Value | +-----------+---------------+---------+ |sem_init() | Thread safety | MT-Safe | +-----------+---------------+---------+ CONFORMING TO POSIX.1-2001. NOTES Bizarrely, POSIX.1-2001 does not specify the value that should be re- turned by a successful call to sem_init(). POSIX.1-2008 rectifies this, specifying the zero return on success. SEE ALSO <STRONG><A HREF="/man3/sem_destroy">sem_destroy(3)</A></STRONG>, <STRONG><A HREF="/man3/sem_post">sem_post(3)</A></STRONG>, <STRONG><A HREF="/man3/sem_wait">sem_wait(3)</A></STRONG>, <STRONG><A HREF="/man7/sem_overview">sem_overview(7)</A></STRONG> COLOPHON This page is part of release 5.05 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/. Linux 2017-09-15 <STRONG><A HREF="/man3/SEM_INIT">SEM_INIT(3)</A></STRONG></PRE> <center> <h6>Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2025 <a href="http://www.he.net">Hurricane Electric</a>. All Rights Reserved.</h6></center> </body> </html>