This question already has answers here:
Check to see if a pthread mutex is locked or unlocked (After a thread has locked itself)

(3个答案)


1年前关闭。




我想找出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
}

我如何在没有锁的情况下做同样的事情?

最佳答案

当您同时执行多个执行时,就没有“同时性”的概念。除非发生明确的同步,否则无法及时为事件指定全局顺序。语言中没有可观察到的属性,通常可以观察到任何类型的顺序。

具体地说,“那边的互斥锁是否被锁定”这个问题是没有意义的。它没有您可以采取行动的答案。不管虚拟答案是什么,互斥锁的状态都可以立即更改。答案是“是的,它已被锁定”(它可能同时被解锁),或者“否,它是未锁定”(可能在到达那里之前被锁定)。

互斥锁唯一可以做的就是尝试将其锁定。您要么失败,从而知道它已被锁定,要么您成功了,因此知道它没有被锁定,现在您有了锁。

关于检查pthread锁定变量是否被锁定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25694110/

10-11 19:40
查看更多