Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2004-07-15 11:34:01


Peter Dimov wrote:
>
>
> The "unified" timed lock case is
>
> {
> scoped_lock l( m, false );
>
> if( l.timed_lock( t ) )
> {
> // do stuff
> }
> else
> {
> // what do we do here? presumably either:
>
> // setup for unbounded wait
> l.lock();
> // do stuff
>
> // or signal failure
> }
> }
>
> The scoped_timed_lock use case also needs to eventually contain an if( l )
> statement; you can't do much if you don't know whether your timed lock
> succeeded. One might also argue that a separate scoped_timed_lock makes
> accidentally omitting the if() statement more likely and harder to spot.
>
> But it's hard to tell without real use cases.
>

I continue to believe that a better interface for a unified lock
involves descriptively named helper functions:

scoped_lock l1( m ); // lock unconditionally
scoped_lock l1 = defer_lock( m ); // don't lock
scoped_lock l2 = try_lock( m ); // try lock
scoped_lock l3 = timed_lock( m, t ); // timed lock

It's just as clear as you could hope for, and it's extensible. I feel
that the single lock c'tor with a bool arg is less readable and rather
inflexible.

Earlier I posted code demonstrating how this interface could be made to
work.

-- 
Eric Niebler
Boost Consulting
www.boost-consulting.com

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