これは素朴な質問だと確信していますが、ネット上であまり助けが見つからなかったので、それでも質問します. pthreads を使用して C++ コードを書いています。以下は、方法の 1 つの概要です。
void Method1()
{
try
{
pthread_mutex_lock(&syncLock);
statement1;
statement2;
pthread_mutex_unlock(&syncLock);
statement3;
statement4;
}
catch(exception& e)
{
log error
}
}
ここで、syncLock はタイプpthread_mutex_t
であり、デフォルトの初期化を使用して初期化されます。
私の質問は、メソッドの statement2 で例外がスローされた場合、コントロールは直接 catch ステートメントに渡されるということです。その場合、ミューテックスはロックされたままです。ただし、例外がステートメント 3 から発生した場合、ミューテックスはロック解除されており、既にロック解除されているミューテックスで unlock を呼び出すと、未定義の動作が発生するため、単純に catch ブロックに unlock ステートメントを記述することもできません。
したがって、catch ステートメントでミューテックスがロック解除されているかどうかを確認する方法はありますか。または、C++で利用可能なC#スタイルのロックステートメントの代替手段があるので、そのブロック内から例外がスローされた場合でもロックが解放されると確信しています
この目的でライブラリを使用するつもりはありません。シンプルなカスタム ソリューションは大歓迎です
ありがとう