私は問題があります。
静的ミューテックスを初期化し、すべての関数でロックしようとしています。関数の 1 つで誤ってロックを解除するのを忘れていましたが、ミューテックス ロックを取得しようとする別の関数を呼び出すと、デッドロックが発生していないようです。
誰かがデッドロックが発生していないのはなぜこのようになっているのか説明してもらえますか?
問題のシナリオを説明するコード:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void main(void)
{
func1(); // Mutex acquired initially but not released at end
func2(); // This function acquires mutex even though mutex was not released by func1();
}
void func1(void)
{
pthread_mutex_lock(&mutex);
printf("I am in func1\n");
//MUTEX NOT UNLOCKED
}
void func2(void)
{
pthread_mutex_lock(&mutex);
printf("I am in func2\n");
//MUTEX AGAIN NOT UNLOCKED
}
func1() でミューテックスが解放されなかったので、 func2() でデッドロックが発生しないのはなぜですか?