我有个问题。
我初始化了一个静态互斥锁,并试图将它锁定在我的所有函数中。我不小心忘记在其中一个函数中解锁它,但是当我调用另一个也尝试获取互斥锁的函数时,似乎没有发生死锁。
有人可以解释一下为什么不会发生死锁吗?
解释我的问题场景的代码:
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
}
有人可以解释一下为什么在 func2() 中没有发生死锁,因为在 func1() 中没有释放互斥锁?