Kev*_*ith 2 c c++ mutex locking pthreads
如果我理解正确,那么foo1()无法解锁&private_value_.因此,foo2()的thread_mutex_lock不起作用,因为foo1()从未释放它.
还有什么后果?
int main ( ... )
foo1();
foo2();
return 0;
}
foo1()
{
pthread_mutex_lock(&private_value_);
do something
// no unlock!
}
foo2()
{
pthread_mutex_lock(&private_value_)
do something
pthread_mutex_unlock(&private_value_);
}
Run Code Online (Sandbox Code Playgroud)
程序应该如何编写以及当前编写的程序将如何表现之间似乎存在一些混淆.
此代码将导致死锁,这并不表示互斥锁的工作方式有问题.它们正在按照它们的预期工作:如果您尝试重新获取已经锁定的非递归互斥锁,则代码将阻塞,直到互斥锁被解锁.这就是它应该如何运作.
由于此代码是单线程的,因此阻塞foo2将永远不会结束,因此您的程序将陷入僵局而不会进展.这很可能不是程序应该如何工作(因为它不是一个非常有用的程序).错误不在于互斥体的运行方式,而在于程序员如何选择使用它们.程序员应该在结束时拨打解锁电话foo1.
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |