Forwarding to standards@ and davidxu@ per Garrett Cooper suggestion.
Also I want to add that I came to this question while observing behavior
consistent with multiple wakeup on FreeBSD-8.1. The heavily
multi-threaded code that assumes that only one thread can be woken up by
one pthread_cond_signal call crashes, and the only reasonable
explanation so far is that more than one threads are actually being
woken up.
Yuri
On 02/27/2011 12:54, Yuri wrote:
On FreeBSD-8.1 this page says:
The pthread_cond_signal() function unblocks one thread waiting for the
condition variable cond.
On Linux it says:
The /pthread_cond_signal/() function shall unblock at least one of the
threads that are blocked on the specified condition variable /cond/
(if any threads are blocked on /cond/).
Also HP page
(http://docs.hp.com/en/B2355-90130/pthread_cond_signal.3T.html) says:
"If there are no threads blocked on /cond/, this function has no
effect." And later it says: "It is possible that more than one thread
can be unblocked due to a spurious wakeup."
This is quite confusing: in case nobody is waiting does it block or
not? In case other threads are waiting it's really "any arbitrary
number of threads are woken up"? Or on FreeBSD it's strictly 1?
Shouldn't this be defined in one and only way by POSIX and all
POSIX-compliant systems should work exactly the same.
I think man page should be expanded to give more comprehensive
explanation.
Yuri
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to
"freebsd-hackers-unsubscr...@freebsd.org"
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"