名前空間
変種
操作

std::recursive_mutex::try_lock

提供: cppreference.com
 
 
スレッドサポートライブラリ
スレッド
(C++11)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件変数
(C++11)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
 
bool try_lock();
(C++11およびそれ以降)

ミューテックスのロックを試みます。 すぐに戻ります。 ロックの取得に成功した場合は true を返し、そうでなければ false を返します。

この関数は、ミューテックスが現在いかなる他のスレッドにもロックされていなくても、 spurious に失敗して false を返すことが認められています。

スレッドは再帰ミューテックスに対して繰り返し try_lock を呼んでも構いません。 try_lock の呼び出しが成功すると、所有権のカウントがインクリメントされます。 ミューテックスは、そのスレッドが同じ回数だけ unlock の呼び出しを行った後にのみ、解放されます。

所有権の最大カウントは未規定です。 最大を超過した場合、 try_lock の呼び出しは false を返します。

true を返した場合、同じミューテックスに対する以前の unlock() 操作は、この操作に対して同期します (std::memory_order を参照してください)。 false を返した場合は同期されないことに注意してください。

目次

[編集] 引数

(なし)

[編集] 戻り値

ロックの取得に成功した場合は true、そうでなければ false

[編集] 例外

(なし)

[編集]

#include <iostream>
#include <mutex>
 
int main()
{
    std::mutex test;
    if (test.try_lock()==true) {
        std::cout << "lock acquired" << std::endl;
        test.unlock();	//now unlock the mutex    
    } else {
        std::cout << "lock not acquired" << std::endl;
    }
 
    test.lock();	//to lock it again
    if (test.try_lock()) {  //true can be left out
        std::cout << "lock acquired" << std::endl;
    } else {
        std::cout << "lock not acquired" << std::endl;
    }
    test.unlock(); 
}

出力:

lock acquired
lock not acquired

[編集] 関連項目

ミューテックスをロックします。 利用可能でない場合はブロックします
(パブリックメンバ関数) [edit]
ミューテックスのロックを解除します
(パブリックメンバ関数) [edit]