Boost logo

Boost :

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).

Hi,

both uses are protected with boost::unique_lock<boost::mutex> &lock. Am
I missing something?

Best,
Vicente
> 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,
> Oliver
>
> _______________________________________________
> 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