如果我在没有调用pthread_mutex_unlock的情况下从函数返回会发生什么?

时间:2011-01-23 14:33:03

标签: c pthreads posix mutex

假设我锁定了一个名为wfg

的互斥锁
pthread_mutex_lock(&wfg);
//and then I return from the function
return 0;

互斥锁会保持锁定状态吗?

2 个答案:

答案 0 :(得分:7)

互斥锁保持锁定状态,直到从获得锁定的线程调用pthread_mutex_unlock为止。功能与它无关。你可以有像

这样的东西
pthread_mutex_t wfg;
...
void razzle()
{
   pthread_mutex_lock(&wfg);
}

void dazzle()
{
  pthread_mutex_unlock(&wfg);
}

...
razzle();
... do stuff ...
dazzle();

这样会很好(但很傻)。

答案 1 :(得分:6)

是的,它仍处于锁定状态,下一个试图锁定它的人将无法执行此操作。其他人(在同一个线程中)可以随后在其他地方解锁它,但是当采集和释放分离时很难验证程序的正确性,因此有些容易出错。 Valgrind包含的工具可能有助于追踪此类问题以及其他更微妙的问题。

在C ++中,这是考虑RAII

的最佳时机