C++11標準ライブラリのstd::mutexオブジェクトでは、ロック取得/解放を同一スレッド*1から行わなければならない。(N3337 30.2.5.2/p3) m.unlock() Requires: The current execution agent shall hold a lock on m. この制約条件のため、下記コードのmutexオブジェクト利用は未定義動作(undefined behavior)を引き起こす。 #include <thread> #include <mutex> std::mutex mtx; // mutexオブジェクト int resource; // 保護対象のリソース void proc() { // resourceを使う処理B mtx.unlock(); // (2) NG:別スレッドでロック解放...したい //... } int mai