我想知道是否锁定了pthread锁定变量。 一种简单的方法是使用如下所示的trylock
pthread_mutex_t lockVar;
if(pthread_mutex_trylock(&lockVar) == 0)
{
//lock was successful
pthread_mutex_unlock(&lockVar);
}
else
{
//someone else holds the lock
}
如果没有获得锁定,我该如何做同样的事情?
答案 0 :(得分:6)
当你同时发生多次执行时,没有"同时性"的概念。除了显式同步发生时,事件不能及时给出全局顺序。从语言中可以观察到任何可以观察到任何类型的排序的属性。
具体来说,问题是那边的互斥锁被锁定了#34;毫无意义。它没有你可以采取行动的答案。无论虚构的答案是什么,互斥体的状态都可以立即改变。没有什么可以回答像#34;是的,它已被锁定" (它可能会同时解锁),或者#34;不,它已解锁" (它可能会在你到达之前被锁定)。
使用互斥锁可以执行的 事件是尝试来锁定它。你要么失败了,要么知道它被锁定了,或者你成功了,因此知道它不是,现在你已经锁定了。
答案 1 :(得分:0)
无论你想对结果做什么,你现在就这样做是唯一的方法。您不能简单地查询互斥锁是否被锁定而不锁定它。如果你想要一个可以查询状态而不修改它的同步原语,POSIX信号量就有可能。二进制信号量可以用作锁(虽然它缺少所有者的概念,如果你需要递归锁定,这对你来说可能是一个问题)并且sem_getvalue
可以确定信号量是否被“锁定”在一个时刻。
至于你问的问题是否有意义,Kerrek已经告诉过你,这通常不是。以下是一些可能的,可以从消极或积极结果中收集的最低限度有用的信息:
阴性:
正:
但在大多数情况下,“互斥锁被锁定了吗?”这不是一个有用的问题。