【发布时间】:2011-09-14 20:04:23
【问题描述】:
假设一个线程成功调用pthread_mutex_lock,是否仍然有可能在同一个线程中调用pthread_mutex_unlock 会失败?如果是这样,除了中止线程之外,你真的可以做点什么吗?
if(pthread_mutex_lock(&m) == 0)
{
// got the lock, let's do some work
if(pthread_mutex_unlock(&m) != 0) // can this really fail?
{
// ok, we have a lock but can't unlock it?
}
}
来自this page,pthread_mutex_unlock() 的可能错误是:
[EINVAL] 由 mutex 指定的值不引用初始化的 互斥对象。
如果锁定成功,那么这不太可能失败。
[再次] 无法获取互斥锁,因为最大数量 已超出互斥锁的递归锁。
真的吗?解锁?
如果出现以下情况,pthread_mutex_unlock() 函数可能会失败:
[EPERM] 当前线程不拥有互斥锁。
同样,如果锁定成功,那么这也不应该发生。
所以,我的想法是,如果锁定成功,那么在这种情况下,解锁应该永远不会失败,从而使错误检查和后续处理代码毫无意义。
【问题讨论】:
标签: pthreads