Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2004-07-09 17:05:03

Howard Hinnant wrote:
> On Jul 9, 2004, at 4:11 PM, Peter Dimov wrote:
>>> rw_mutex m;
>>> void invitation_for_deadlock()
>>> {
>>> read_lock r(m);
>>> // ok to read
>>> upgradable_read_lock ur(m);
>>> r.unlock();
>>> write_lock w(ur);
>>> // ok to write
>>> }
>>> And the next thing we'll know is that the entire NE US is falling
>>> into a blackout. ;-)
>>> It took me awhile to spot the deadlock in the above code. Does
>>> anyone else see the above code as scary? (scary as in looks ok but
>>> isn't). Or is the deadlock obvious to everyone else (and thus not
>>> scary)?
>> Not scary, IMO, even if not obvious, because it always deadlocks, as
>> soon as you attempt the "idiom". You can't miss it.
> I'm not following "always deadlocks". If only one thread enters, at
> what point does it deadlock (assuming no other thread playing with m)?
> Experimentally running through this on my prototype implementation with
> a single thread isn't deadlocking. But perhaps my prototype is buggy?

I wouldn't bet on that. Can I change my opinion to "scary"? ;-)

Boost list run by bdawes at, gregod at, cpdaniel at, john at