Subject: Re: [boost] [thread] possible raise in future?
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2013-02-03 11:04:53
Le 03/02/13 13:04, Oliver Kowalke a écrit :
> Hello Vicente,
> after analyzing the code of future<> from boost.thread I think the code
> might contain raise condition.
> future.hpp:226: future_object_base defined 'bool done'.
> future_object_base::mark_finished_internal() sets 'done' tot true (line
> 308) and future_object_base::wait_internal()
> reads it (line 347).
both uses are protected with boost::unique_lock<boost::mutex> &lock. Am
I missing something?
> Shouldn't 'done' be of type atomic<bool >? I believe that the compiler can
> reorder the usage of 'done' and two
> threads (writer thread calling make_finished_internal() and reader calling
> wait_internal()) might see different values.
> At least I think it might be possible that some thread will always be
> waiting in waiters.wait() (line 349), because
> the write r thread sets done=true and call waiters.notify_all() and a
> reader thread calls later wait_internal() but does not
> see that done is true because of memory reordering etc. and will be blocked
> in waiters.wait()forever.
> What do you think?
> best regards,
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk