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

and*_*and 1 c posix mutex pthreads

假设我锁定了一个名为的互斥锁 wfg

pthread_mutex_lock(&wfg);
//and then I return from the function
return 0;
Run Code Online (Sandbox Code Playgroud)

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

Log*_*ldo 7

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

pthread_mutex_t wfg;
...
void razzle()
{
   pthread_mutex_lock(&wfg);
}

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

...
razzle();
... do stuff ...
dazzle();
Run Code Online (Sandbox Code Playgroud)

那会很好(但很傻).


Fle*_*exo 6

是的,它仍然被锁定,下一个试图锁定它的人将无法这样做.其他人(在同一个线程中)可以随后在其他地方解锁它,但是当采集和释放分离时很难验证程序的正确性,因此有些容易出错.Valgrind包含一个工具,可以帮助追踪像这样的问题和其他更微妙的问题.

在C++中,这是考虑RAII的最佳时机