在我的代码中我使用pthread_mutx_trylock()来检查线程1是否完成了他的 工作和释放互斥锁?请让我知道它是否有效?
在主题1中:
pthread_mutex_lock(&sync_wait);
// Waiting for return type.
pthread_mutex_unlock(&sync_wait);
在主题2中:
while (pthread_mutex_trylock(&sync_wait) == 0) {
}; // Wait until other thread has lock
// Waiting till thread 1 sync wait lock has not released.
pthread_mutex_unlock(&sync_wait);
答案 0 :(得分:1)
来自手册页
如果锁定,pthread_mutex_trylock()函数将返回零 获取互斥锁引用的互斥锁对象。否则,出错 返回数字以指示错误。
// so this will loop forever once you aquire lock
while (pthread_mutex_trylock(&sync_wait) == 0) {
}; // Wait until other thread has lock
修改强>
此部分代码应处理您的方案
while ( int ret = pthread_mutex_trylock( &sync_wait) )
{
// Unable to get Mutex probably some other thread aquired it
// sleep for some time usleep or even better use pthread_mutex_timedlock
// Ideally possible ret values should have been handled but for now
// this will do
}
完成工作后和是pthread_mutex_unlock( );
这是manpage
还有一个关于pthread_mutex_lock
和pthread_mutex_trylock
here之间差异的问题
这是另一个example of handling multiple return values from pthread_try_lock()
答案 1 :(得分:0)
如果要在另一个线程执行到某个特定点时唤醒特定线程,则互斥锁通常不是适当的同步原语。替代方法是:
pthread_barrier_wait
功能pthread_cond_wait
和pthread_cond_signal
函数sem_wait
和sem_post
函数