Howard Hinnant wrote:
[...]
> class rw_mutex
> {
> public:
>         typedef detail::read_lock<rw_mutex>  read_lock;
>         typedef detail::write_lock<rw_mutex> write_lock;
>       ...
> };
[...]
> This looks slightly more readable and writable to me.  And will avoid
> unlock() having to check what kind of lock (read or write) it is trying
> to unlock.

Yup. 

http://google.com/groups?threadm=3ef71197%40usenet01.boi.hp.com
(Subject: Re: newbie question)

<quote>

 > And, you know, the fact POSIX threading API doesn't have rdunlock()
 > and wrunlock() operations [separate calls] makes me kinda wonder WHY
 > "someone" was definitely NOT thinking in the direction of reducing
 > the amount of reordering constraints imposed on the implementation
 > [i.e. compiler, in the first place; things like IPA aside] to the
 > absolute minimum that's actually needed when the current threading
 > API was created/voted. You keep telling me about the mutex... think
 > of a read-write lock for a second, please.

 Believe me, I've thought about it for a lot more than a second.

 As for the combined unlock function, all I can say is that I always thought 
 that was a bad idea too. Not just for potential efficiency, but also 
 because it restricts error checking. That is, if someone accidentally calls 
 pthread_rwlock_wrunlock() twice, you can cause it to fail. But readers 
 generally aren't identified, merely counted, so if a writer calls 
 pthread_rwlock_unlock() twice, and on the second call there's one or more 
 readers, the call can do nothing but "successfully" unlock for read. The 
 alternative would be to keep a list of all active readers; but that gets 
 messy quickly when you have to account for a thread possibly holding 
 multiple read locks at the same time.
 
 You can take this as evidence that POSIX doesn't always listen to me. ;-)

</quote>

regards,
alexander.

P.S. Butenhof is, of course totally wrong in the rest of that article. ;-)

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to