Boost logo

Boost :

Subject: Re: [boost] [thread] synchronized_value: value and move semantics
From: Vicente Botet (vicente.botet_at_[hidden])
Date: 2013-06-26 12:03:29


Ben Pope wrote
> On 21/02/13 02:02, Vicente J. Botet Escriba wrote:
>>
>> Hi,
>>
>> boost::synchronized_value (not released yet [1][2][3]) is based on [4].
>> See below part of this paper adapted to the Boost.Thread interface.
>>
>> Currently boost::synchronized_value is in addition Copyable and
>> Swappable. I was wondering if it is worth adding value and move
>> semantics to synchronized_value. Making it EqualityComparable,
>> LessThanComparable and Movable if the underlying type satisfy these
>> requirements will allow to store them on a Boost.Container/C++11
>> container.
>>
>> Do you see something completely wrong with this addition?
>> Has some of you had a need for this? Could you share the context?
>
> Sorry, I'm a bit late to the party and not really answering the question.
>
> I can see the usefulness of synchronized_value for C++03, but not in
> C++11.

Why?

> It's just too easy to forget to call the synchronise() member:
>
> boost::synchronized_value<std::queue<int>> synch_queue;
> if(!synch_queue->empty())
> synch_queue->pop();
>
> when was was meant was (excuse use of auto, I've become lazy):
>
> boost::synchronized_value<std::queue<int>> synch_queue;
> {
> auto lock = synch_queue.synchronize();
> if(!synch_queue->empty())
> synch_queue->pop();
> }
>
> This is neither safe or efficient (2 lock/unlocks).

this should be

boost::synchronized_value<std::queue<int>> synch_queue;
{
    auto lock = synch_queue.synchronize();
    if(!lock->empty())
       lock->pop();
}

> I think this should just not exist in C++11 and instead be replaced by
> something like monitor
> <T>
> described by Herb Sutter [1]:
>
> monitor&lt;std::queue&lt;int&gt;> synch_queue;
> queue([](std::queue& q)
> {
> if(!q.empty())
> q.pop();
> }

Sorry I don't understand the syntax.

> Now we're safe and efficient (one lock/unlock per block).

This was just the intention of synchronize ;-)

> Since movability is a C++11 thing, can we have something harder to use
> incorrectly than synchronized_value for C++11?

Could you elaborate?

> I guess my point is rather than C++11ifying synchronized_value, can we
> have monitor instead?
>
> Thoughts?

Could you summarize here what are the advantages the monitor you are
referring to?

Best,
Vicente

--
View this message in context: http://boost.2283326.n4.nabble.com/thread-synchronized-value-value-and-move-semantics-tp4643126p4648963.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

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