我很确定这是一个幼稚的问题,但仍然会问它,因为我在网上找不到太多帮助。我正在使用 pthreads 编写 c++ 代码。以下是其中一种方法的概述
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,则互斥锁已被解锁,并且在已解锁的互斥锁上调用解锁会导致未定义的行为。
那么有没有办法可以在 catch 语句中检查互斥锁是否已解锁。或者,C++ 中是否有可用的 C# 样式锁定语句替代方案,所以我确信即使从该块中抛出异常,锁定也会被释放
我不倾向于为此目的使用库。一个简单的自定义解决方案将不胜感激
谢谢