semaphore question
Richard Stevens
stevens at hsi.UUCP
Thu Apr 28 05:51:13 AEST 1988
I have a question about the System 5 semaphores and their
initialization.
I have 2 processes that are started at about the same time.
They use a semaphore to guarantee exclusive access to a shared resource.
The first process executed must create the semaphore and initialize it -
here is where my problem is - I don't see an easy way to both create
a new semaphore and initialize it (atomically). (Yes, I know that
there are other, better and easier ways to do the same thing.)
(1) The System 5 man pages, specifically semget(2), don't say anything
about initialization of the semaphore value itself. Neither does
the Chapter on IPC in the System 5.3 Programmer's Manual.
(2) From a perusal of the system 5.2 source code it appears that
semget() *doesn't* set the semaphore value when a new semaphore
is created. Whatever happens to be in that (random) memory
location is what its initial value is, until you specifically
set it with semctl(2).
(3) If you try a combination of system calls, you're going to have
a race condition.
(4) Looking in some texts I have handy, other operating systems
(Xinu and Tunis, for example) handle the creation of a
semaphore as an operation that also initializes it.
Why doesn't the System 5 implementation do this ??
(5) If you have a client/server situation where the server is the
only process that can create the semaphore, it can then
also initialize it, and all is OK.
Is there some trick that I'm missing ??
Richard Stevens
Health Systems International, New Haven, CT
{ uunet | ihnp4 | yale } ! hsi ! stevens
More information about the Comp.unix.wizards
mailing list