]> git.saurik.com Git - apple/xnu.git/blob - osfmk/man/semaphore_create.html
xnu-344.tar.gz
[apple/xnu.git] / osfmk / man / semaphore_create.html
1 <h2>semaphore_create</h2> <hr> <p> <strong>Function</strong> - Create a new semaphore. <h3>SYNOPSIS</h3> <pre> <strong>kern_return_t semaphore_create</strong> <strong>(task_t</strong> <var>task</var>, <strong>semaphore_t</strong> <var>*semaphore</var>, <strong>int</strong> <var>policy</var>, <strong>int</strong> <var>value</var><strong>);</strong> </pre> <h3>PARAMETERS</h3> <dl> <dt> <var>task</var> <dd> [in task port] The task receiving the send right of the newly created semaphore. <p> <dt> <var>semaphore</var> <dd> [out send right] The port naming the created semaphore. <p> <dt> <var>policy</var> <dd> [in scalar] The blocked thread wakeup policy for the newly created semaphore. Valid policies are: <dl> <p> <dt> SYNC_POLICY_FIFO <dd> a first-in-first-out policy for scheduling thread wakeup. <p> <dt> SYNC_POLICY_FIXED_PRIORITY <dd> a fixed priority policy for scheduling thread wakeup. </dl> <p> <dt> <var>value</var> <dd> [in scalar] The initial value of the semaphore count. </dl> <h3>DESCRIPTION</h3> <p> The <strong>semaphore_create</strong> function creates a new semaphore, associates the created semaphore with the specified task, and returns a send right naming the new semaphore. In order to support a robust producer/consumer communication service, Interrupt Service Routines (ISR) must be able to signal semaphores. The semaphore synchronizer service is designed to allow user-level device drivers to perform signal operations, eliminating the need for event counters. Device drivers which utilize semaphores are responsible for creating (via <strong>semaphore_create</strong>) and exporting (via <strong>device_get_status</strong>) semaphores for user level access. Device driver semaphore creation is done at device initialization time. Device drivers may support multiple semaphores. <h3>RETURN VALUES</h3> <dl> <p> <dt> <strong>KERN_INVALID_ARGUMENT</strong> <dd> The task argument or the policy argument was invalid, or the initial value of the semaphore was invalid. <p> <dt> <strong>KERN_RESOURCE_SHORTAGE</strong> <dd> The kernel could not allocate the semaphore. <p> <dt> <strong>KERN_SUCCESS</strong> <dd> The semaphore was successfully created. </dl> <h3>RELATED INFORMATION</h3> <p> Functions: <a href="semaphore_destroy.html"><strong>semaphore_destroy</strong></a>, <a href="semaphore_signal.html"><strong>semaphore_signal</strong></a>, <a href="semaphore_signal_all.html"><strong>semaphore_signal_all</strong></a>, <a href="semaphore_wait.html"><strong>semaphore_wait</strong></a>, <a href="device_get_status.html"><strong>device_get_status</strong></a>.