[英]C Pthreads mutex values?
我正在编写一个包含几个关键部分的程序。 问题是我需要在if语句中检查互斥锁的值。
我想做这样的事情:
if pthread_mutex(&mutex) == 0 // locked
// Do something
else if pthread_mutex(&mutex) == 1 // unlocked
// Do something else
这可能吗?
从该链接:
pthread_mutex_trylock()函数应该等效于pthread_mutex_lock(),除非如果mutex引用的互斥对象当前被锁定(由任何线程,包括当前线程),则调用应立即返回。 ...返回值...如果获取了互斥锁引用的互斥锁对象上的锁,则pthread_mutex_trylock()函数将返回零。 否则,返回错误号以指示错误
所以你的代码会是这样的:
pthread_mutex_t *m = /* ... */;
if (pthread_mutex_trylock(m) == 0)
{
/* Success! This thread now owns the lock. */
}
else
{
/* Fail! This thread doesn't own the lock. Do something else... */
}
不,你不应该尝试这样做。 我认为,pthread互斥锁用于管理对某些关键资源的本地访问,如果在某个地方你的程序不知道这个实际线程是否持有锁,那么你使用的是错误的工具。 我看到两种选择:
sem_t
作为控制DS。 它们没有被粘贴到“保持”它们的特定线程的限制,但是基于令牌,所以获得令牌的任何线程都可以完成所需的工作。 (但要小心并检查这些例程可能被中断的函数的返回值。) 如果您想知道您的互斥锁是否已被锁定,我建议您使用pthread_mutex_trylock
。 请记住,锁定互斥锁是一项繁重的操作,如果不是,则不应将其锁定以进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.