如何正确处理pthread互斥?

时间:2014-06-25 13:26:25

标签: c++ pthreads mutex

我写了一个包装互斥锁的类。在析构函数中,我调用pthread_mutex_destroy,有时它返回EBUSY,因为其他一些线程还没有释放它。我的问题是,处理互斥锁销毁的最佳方法是什么?我应该等待它免费吗?

这是我到目前为止所做的,这可能不是最佳解决方案:

Mutex::~Mutex()
{
    int rc = pthread_mutex_destroy( &_mutex );
    while ( rc == EBUSY )
    {
        lock(); // Call to pthread_mutex_lock
        unlock(); // Call to pthread_mutex_unlock

        // Attempt destroy again
        rc = pthread_mutex_destroy( &_mutex );
    }
}

1 个答案:

答案 0 :(得分:2)

  

我的问题是,处理互斥锁销毁的最佳方法是什么?我应该等待它免费吗?

在使用资源时不应该破坏资源,因为这通常会导致未定义的行为。

正确的行动方针是:

  • 告诉另一个线程释放资源并等到它,或者
  • 告诉另一个线程礼貌地终止等待,直到它完成,或
  • 将资源的所有权传递给另一个线程,让它随心所欲地管理资源的生命周期,或者
  • 使用共享资源,以便在用户还在的时候保持活跃状态​​。