4

タイトルによると、 boost::unique_lock で try_lock する方法は?

私はこのコードを持っています:

void mySafeFunct()
{
    if(myMutex.try_lock() == false)
    {
        return -1;
    }

    // mutex ownership is automatically acquired

    // do stuff safely

    myMutex.unlock();
}

ここで、単純な boost::mutex の代わりに、unique_lock (スコープ付きミューテックスでもあります) を使用したいと思います。これにより、関数本体からのすべての unlock() 呼び出しを回避したいと考えています。

4

3 に答える 3

10

Defer コンストラクターでロックを延期するか、作成時にTry コンストラクターを使用できますunique_lock

boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::try_lock);

if (!lock.owns_lock())
    return -1;

...
于 2012-11-15T10:50:38.473 に答える
6
boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::defer_lock);
lock.try_lock()
于 2012-11-15T10:46:00.457 に答える
4

以前の回答は古くなっている可能性があります。私はboost 1.53を使用していますが、これはうまくいくようです:

boost::unique_lock<boost::mutex> lk(myMutex, boost::try_to_lock);
if (lk)
  doTheJob();
于 2013-11-20T06:18:13.710 に答える