$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] How to use lock_guard
From: Oliver Seiler (oseiler_at_[hidden])
Date: 2009-03-17 13:29:48
On Tue, Mar 10, 2009 at 8:51 AM, Roman Perepelitsa
<roman.perepelitsa_at_[hidden]> wrote:
> [...]
> You should not manually call destructors of automatic (stack allocated)
> objects. It's an Undefined Behavior and in practice it usually causes
> destructor to be called twice. You might want to put lock_guard in
> additional scope.
>
> {
> boost::lock_guard<boost::mutex> lock(_mut);
> // Data received from RS232
> _device.GetData(_buffer);
> // .... CODE ....
> } // Destructor of lock is called here.
> signal_OnData(); }
Or use unique_lock or scoped_lock:
boost::mutex::scoped_lock lock(_mut);
....
lock.unlock();
signal_OnData();