[libdispatch-dev] [PATCH 09/17] portability

Robert Watson robert at fledge.watson.org
Sat Oct 31 02:56:14 PDT 2009

On Fri, 30 Oct 2009, Kevin Van Vechten wrote:

>> #else /* !HAVE_MACH */
>> static void
>> _dispatch_posix_semaphore_create(sem_t *s4)
>> {
>> 	if (*s4) return;
>> 	ret = sem_init(s4, 0, 0); // XXX race condition for assignment to s4
>> }
>> #endif /* HAVE_MACH */
> Based on the above discussion it seems like we may need to make 
> dispatch_semaphore_t be a thinner wrapper around OS semaphores on platforms 
> where the semaphore's handle cannot be atomically exchanged — i.e. we may 
> need to forgo the optimization of lazily allocating the OS semaphore.

Especially given that the size of sem_t appears to exceed the maximum size of 
types that can be operated on using atomic instructions on some systems. I 
agree that I got the semantics off there in the port.  However, eliminating 
this optimization may not be a big deal: pthread semaphores will already 
likely have similarly optimized behavior on most systems, and if not, can grow 
them. :-)

Robert N M Watson
Computer Laboratory
University of Cambridge

More information about the libdispatch-dev mailing list