This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

No support for sharing unnamed semaphores between processes through shared memory?


Hello,

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.

If the use case is not supported, what is the recommended work-around?
 Named semaphores?

Thank you,
Matt

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]