pthread_mutex_unlockを呼び出さずに関数から戻るとどうなりますか?
pthread_mutex_lock(&wfg);
//and then I return from the function
return 0;
wfg
がミューテックスをロックされたままだろう、私はと呼ばれるミューテックスをロックすると仮定?
pthread_mutex_unlockを呼び出さずに関数から戻るとどうなりますか?
pthread_mutex_lock(&wfg);
//and then I return from the function
return 0;
wfg
がミューテックスをロックされたままだろう、私はと呼ばれるミューテックスをロックすると仮定?
はい、ロックされたままになり、次にロックしようとするユーザーはロックできません。他の誰か(同じスレッド内の)が引き続き別の場所でロックを解除することができますが、取得と解放が分離されたときにプログラムの正しさを検証するのが難しく、結果的にエラーが発生しやすくなります。 には、このような問題やその他の微妙な問題の追跡に役立つツールが含まれています。 Cでは
++これはpthread_mutex_unlock
がロックを取得したスレッドからそれに呼び出されるまでRAII
mutexがロックされたままを検討するのに最適な時間です。関数はそれとは何の関係もありません。
pthread_mutex_t wfg;
...
void razzle()
{
pthread_mutex_lock(&wfg);
}
void dazzle()
{
pthread_mutex_unlock(&wfg);
}
...
razzle();
... do stuff ...
dazzle();
これはうまくいくかもしれませんが、愚かでしょう。