如何正确处理pthread互斥锁
How to properly dispose of a pthread 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 );
}
}
我的问题是,什么是最好的方法来处理互斥锁的销毁?我应该等它免费吗?
你不应该破坏正在使用的资源,因为这通常会导致未定义的行为。
正确的做法是:
- 告诉其他线程释放资源并等待,或者
- 告诉另一个线程礼貌地终止并等待,直到它完成,或者
- 将资源的所有权传递给另一个线程,并让它按照自己的意愿管理资源的生命周期,或者
- 使用共享的资源,这样当它的用户还在的时候,它们仍然是活的。
相关文章:
- arm-none-eabi-g++ 不能使用 -flto 正确处理弱别名
- 如何避免 boost 的野兽body_limit错误并正确处理大消息
- 如何正确处理渲染大小为 >= 2B 的 utf-8 字符?
- 是否正确处理了此代码异常?
- 为什么 CSpinButtonCtrl 不能正确处理大于 1000 的数字?
- 自定义迭代器:如果 a 和 b 的行为不同,如何正确处理距离计算和相等比较
- 编译器在 C/C++ 中通过指针调用函数时如何正确处理 ABI
- 如何在 Python 3 中正确处理用于嵌入的字符串
- 如何正确处理OpenSSL错误(BIO)
- 为什么我的模板专业检查不足以正确处理相应的类型
- 在子类过程中正确处理WM_PASTE
- 如何正确处理此SFINAE
- 如何在 c++ 中正确处理常量字符*
- 如何在多线程程序中使用 boost::asio 正确处理 fork()
- 类的静态实例无法在程序退出时正确处理资源删除
- 正确处理字节对齐问题 - 通过UDP在16位嵌入式系统和32位桌面之间
- 如何确保二元布尔操作员正确处理其论点的构造
- FSNF 无法正确处理字符串
- VS2010 未正确处理预处理器条件下的"includes"
- 如何正确处理pthread互斥锁