No support for sharing unnamed semaphores between processes through shared memory?
Tue Oct 9 13:54:00 GMT 2012
On Sep 10 09:36, Matt Sexton wrote:
> I am attempting to port to Cygwin an application that synchronizes
> between processes using unnamed semaphores in shared memory. Both
> processes have mapped the shared memory region, one process
> initializes the semaphore, and both processes perform operations on
> it. Under Cygwin, the second process, which does not initialize the
> semaphore, gets an EINVAL error when calling sem_post() on that
> semaphore. (There is no race condition between the initialization and
> the posting of the semaphore by the different processes.)
> Looking in /usr/include/semaphore.h, it appears that a sem_t is
> typedef'ed as pointer to a struct.
> In winsup/cygwin/thread.cc, semaphore::init appears to make the value
> of the semaphore the result of a new operation. This step would seem
> to preclude the sharing the of the semaphore between processes, since
> the pointer is only valid in the address space of the first process.
> Is there no support for sharing unnamed semaphores between processes
> using shared memory? The man page under Linux documents this use case
> and does seem to imply that it is part of the POSIX standard.
No, this case isn't supported, unfortunately. The implementation of
pthreads in Cygwin is rather old, quite convoluted, and could probably
need a major revamp to support all POSIX requirements.
> If the use case is not supported, what is the recommended work-around?
> Named semaphores?
Named semaphors should work in your scenario.
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Problem reports: http://cygwin.com/problems.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin