1

次の簡単なコードを検討してください。

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. 私のプログラムでは、スレッドがロックに対する排他的権利を持っている場合にのみ非同期操作を実行する必要があるため、これは問題です。そう:

  1. そのミューテックスを所有しているのに、try_lock が false を返すのはなぜですか?
  2. ロックを所有するスレッドによってのみ実行されるコード ブロックを作成するにはどうすればよいですか?
4

1 に答える 1

-1

あなたのコードはひどく設計されています。再帰的ミューテックスを使用しようとする試みは、設計上のバグを示しています。コードでは、必要なリソースを保護する必要があり、スレッドが現在リソースを所有しているかどうかは問題ではありません。

于 2015-11-04T16:57:44.387 に答える