我很确定这是一个天真的问题,但仍然会问这个问题,因为我在网上找不到太多帮助。我正在使用pthreads编写一个C++代码。以下是所述方法如何检查pthread_mutex_t是否被锁定
void Method1()
{
try
{
pthread_mutex_lock(&syncLock);
statement1;
statement2;
pthread_mutex_unlock(&syncLock);
statement3;
statement4;
}
catch(exception& e)
{
log error
}
}
其中SYNCLOCK是pthread_mutex_t
类型的,并且使用缺省初始化初始化一个的轮廓。
我的问题是,如果在方法的statement2中引发异常,则控件直接传递给catch语句。在这种情况下,我的互斥锁保持锁定状态。但我也不能简单地在catch块中写入一个解锁语句,因为如果异常来自语句3,那么互斥锁已被解锁,并且对已经解锁的互斥锁调用解锁会导致未定义的行为。
那么有没有一种方法可以检查互斥锁是否已在解锁语句中解锁。或者,在C++中是否存在C#样式锁定语句替代方案,因此我确信即使从该区块中抛出异常,也会释放该锁定。
我不倾向于使用库来实现此目的。一个简单的自定义解决方案将非常感激
感谢
感谢您的解决方案! –