次の簡単なコードを検討してください。
boost::mutex m;
m.lock();
bool locked = m.try_lock();
std::cout<< (!locked? "Can't use lock" : "Can use lock.")<<std::endl;
system("pause");
コードプリントのCan't use lock
. 私のプログラムでは、スレッドがロックに対する排他的権利を持っている場合にのみ非同期操作を実行する必要があるため、これは問題です。そう:
- そのミューテックスを所有しているのに、try_lock が false を返すのはなぜですか?
- ロックを所有するスレッドによってのみ実行されるコード ブロックを作成するにはどうすればよいですか?