pthread_mutex_trylock()用来等待,直到其他锁没有释放

时间:2017-11-16 03:47:43

标签: c multithreading pthreads

在我的代码中我使用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);

2 个答案:

答案 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_lockpthread_mutex_trylock here之间差异的问题 这是另一个example of handling multiple return values from pthread_try_lock()

答案 1 :(得分:0)

如果要在另一个线程执行到某个特定点时唤醒特定线程,则互斥锁通常不是适当的同步原语。替代方法是: