Boost logo

Boost :

From: Yuval Ronen (ronen_yuval_at_[hidden])
Date: 2006-12-06 17:12:47


Peter Dimov wrote:
> Yuval Ronen wrote:
>> Hello.
>>
>> The Boost CV class forces that a mutex would be locked when calling
>> wait(), but not when calling notify(). This seems a bit strange to me.
>
> It isn't strange since notify is typically not called with the mutex locked.
> This would cause the awakened thread to immediately be put back to sleep to
> wait for the mutex.

Yes, but what's the harm in that? The notify simply change the state of
the thread from "waiting on a CV" to "waiting on a mutex". I'm no
operating system expert, but I guess it can be done with a flip of a
flag (or two) inside the kernel. After that we continue normally. Seems
reasonable to me.

>> As far as my understanding of CVs goes (and experience with them),
>> locking when notifying is just as "makes sense" as locking when
>> waiting.
>> When waiting, we check the predicate, and when notifying, we change
>> that predicate. And it is only obvious that all reads and writes to
>> the shared-among-threads predicate should be locked. Shouldn't it?
>
> It should.

So I understand that it's your opinion that the benefits of having an
interface that emphasizes locking both on wait and on notify - of the
same mutex, as it should - aren't worth it?


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk