Is pthread_cond_signal(3) man page correct?

Yuri yuri at rawbw.com
Sun Feb 27 21:26:20 UTC 2011


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 at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to 
> "freebsd-hackers-unsubscribe at freebsd.org"
>



More information about the freebsd-hackers mailing list