1*19c3b8c2SApple OSS Distributions<h2>semaphore_create</h2> 2*19c3b8c2SApple OSS Distributions<hr> 3*19c3b8c2SApple OSS Distributions<p> 4*19c3b8c2SApple OSS Distributions<strong>Function</strong> - Create a new semaphore. 5*19c3b8c2SApple OSS Distributions<h3>SYNOPSIS</h3> 6*19c3b8c2SApple OSS Distributions<pre> 7*19c3b8c2SApple OSS Distributions<strong>kern_return_t semaphore_create</strong> 8*19c3b8c2SApple OSS Distributions <strong>(task_t</strong> <var>task</var>, 9*19c3b8c2SApple OSS Distributions <strong>semaphore_t</strong> <var>*semaphore</var>, 10*19c3b8c2SApple OSS Distributions <strong>int</strong> <var>policy</var>, 11*19c3b8c2SApple OSS Distributions <strong>int</strong> <var>value</var><strong>);</strong> 12*19c3b8c2SApple OSS Distributions</pre> 13*19c3b8c2SApple OSS Distributions<h3>PARAMETERS</h3> 14*19c3b8c2SApple OSS Distributions<dl> 15*19c3b8c2SApple OSS Distributions<dt> <var>task</var> 16*19c3b8c2SApple OSS Distributions<dd> 17*19c3b8c2SApple OSS Distributions[in task port] The task receiving the send right of the newly created semaphore. 18*19c3b8c2SApple OSS Distributions<p> 19*19c3b8c2SApple OSS Distributions<dt> <var>semaphore</var> 20*19c3b8c2SApple OSS Distributions<dd> 21*19c3b8c2SApple OSS Distributions[out send right] The port naming the created semaphore. 22*19c3b8c2SApple OSS Distributions<p> 23*19c3b8c2SApple OSS Distributions<dt> <var>policy</var> 24*19c3b8c2SApple OSS Distributions<dd> 25*19c3b8c2SApple OSS Distributions[in scalar] The blocked thread wakeup policy for the newly created semaphore. Valid policies are: 26*19c3b8c2SApple OSS Distributions<dl> 27*19c3b8c2SApple OSS Distributions<p> 28*19c3b8c2SApple OSS Distributions <dt> SYNC_POLICY_FIFO 29*19c3b8c2SApple OSS Distributions<dd> 30*19c3b8c2SApple OSS Distributionsa first-in-first-out policy for scheduling thread wakeup. 31*19c3b8c2SApple OSS Distributions <p> 32*19c3b8c2SApple OSS Distributions <dt> SYNC_POLICY_FIXED_PRIORITY 33*19c3b8c2SApple OSS Distributions<dd> 34*19c3b8c2SApple OSS Distributionsa fixed priority policy for scheduling thread wakeup. 35*19c3b8c2SApple OSS Distributions </dl> 36*19c3b8c2SApple OSS Distributions <p> 37*19c3b8c2SApple OSS Distributions<dt> <var>value</var> 38*19c3b8c2SApple OSS Distributions<dd> 39*19c3b8c2SApple OSS Distributions[in scalar] The initial value of the semaphore count. 40*19c3b8c2SApple OSS Distributions</dl> 41*19c3b8c2SApple OSS Distributions<h3>DESCRIPTION</h3> 42*19c3b8c2SApple OSS Distributions<p> 43*19c3b8c2SApple OSS DistributionsThe <strong>semaphore_create</strong> function creates a new semaphore, associates the 44*19c3b8c2SApple OSS Distributionscreated semaphore with the specified task, and returns a send right 45*19c3b8c2SApple OSS Distributionsnaming the new semaphore. In order to support a robust 46*19c3b8c2SApple OSS Distributionsproducer/consumer communication service, Interrupt Service Routines 47*19c3b8c2SApple OSS Distributions(ISR) must be able to signal semaphores. The semaphore synchronizer 48*19c3b8c2SApple OSS Distributionsservice is designed to allow user-level device drivers to perform 49*19c3b8c2SApple OSS Distributionssignal operations, eliminating the need for event counters. Device 50*19c3b8c2SApple OSS Distributionsdrivers which utilize semaphores are responsible for creating (via 51*19c3b8c2SApple OSS Distributions<strong>semaphore_create</strong>) and exporting (via <strong>device_get_status</strong>) 52*19c3b8c2SApple OSS Distributionssemaphores for 53*19c3b8c2SApple OSS Distributionsuser level access. Device driver semaphore creation is done at device 54*19c3b8c2SApple OSS Distributionsinitialization time. Device drivers may support multiple semaphores. 55*19c3b8c2SApple OSS Distributions<h3>RETURN VALUES</h3> 56*19c3b8c2SApple OSS Distributions<dl> 57*19c3b8c2SApple OSS Distributions <p> 58*19c3b8c2SApple OSS Distributions<dt> <strong>KERN_INVALID_ARGUMENT</strong> 59*19c3b8c2SApple OSS Distributions<dd> 60*19c3b8c2SApple OSS DistributionsThe task argument or the policy argument was invalid, 61*19c3b8c2SApple OSS Distributions or the initial value of the semaphore was invalid. 62*19c3b8c2SApple OSS Distributions <p> 63*19c3b8c2SApple OSS Distributions<dt> <strong>KERN_RESOURCE_SHORTAGE</strong> 64*19c3b8c2SApple OSS Distributions<dd> 65*19c3b8c2SApple OSS DistributionsThe kernel could not allocate the semaphore. 66*19c3b8c2SApple OSS Distributions <p> 67*19c3b8c2SApple OSS Distributions<dt> <strong>KERN_SUCCESS</strong> 68*19c3b8c2SApple OSS Distributions<dd> 69*19c3b8c2SApple OSS DistributionsThe semaphore was successfully created. 70*19c3b8c2SApple OSS Distributions</dl> 71*19c3b8c2SApple OSS Distributions<h3>RELATED INFORMATION</h3> 72*19c3b8c2SApple OSS Distributions<p> 73*19c3b8c2SApple OSS DistributionsFunctions: 74*19c3b8c2SApple OSS Distributions<a href="semaphore_destroy.html"><strong>semaphore_destroy</strong></a>, 75*19c3b8c2SApple OSS Distributions<a href="semaphore_signal.html"><strong>semaphore_signal</strong></a>, 76*19c3b8c2SApple OSS Distributions<a href="semaphore_signal_all.html"><strong>semaphore_signal_all</strong></a>, 77*19c3b8c2SApple OSS Distributions<a href="semaphore_wait.html"><strong>semaphore_wait</strong></a>, 78*19c3b8c2SApple OSS Distributions<a href="device_get_status.html"><strong>device_get_status</strong></a>. 79