我正在开发一个线程安全类,它也处理错误。我想知道如何处理来自函数pthread_mutex_unlock()的可能错误。如果我扔了互斥锁的话?我应该再次解锁它还是销毁类对象?
int SomeClass::function() {
int res = pthread_mutex_lock(&_mutex);
if(res < 0)
throw std::runtime_error("lock failed: " + std::string(std::strerror(res)));
// some code
res = pthread_mutex_unlock(&_mutex);
if(res < 0)
throw std::runtime_error("unlock failed: " + std::string(std::strerror(res)));
return something;
}谢谢!
编辑:
可变_mutex是仅使用pthread_mutex_init(&_mutex, NULL)在构造函数内初始化的受保护类成员(非静态)。
发布于 2016-07-09 18:29:43
当pthread_mutex_unlock被解锁不是有效的互斥或互斥对象不属于线程时,绝对是失败的唯一情况。因此,如果这两种情况都没有发生,那么您不应该担心,而且这两种情况都是应用程序错误--此时您可以抛出一个异常,而不必担心互斥状态,您有一个更大的问题。
https://stackoverflow.com/questions/38283569
复制相似问题