我必须处理设计限制(依赖性问题)以不对互斥体使用范围保护。
示例代码:
template<typename MutexType>
class Test
{
MutexType myMutex;
public:
void f()
{
myMutex.Lock();
//code with many returns here depending on conditions
myMutex.Unlock();
}
};
有没有其他安全的方法来处理没有范围保护的多次返回?在这个概念被广泛使用之前,这是如何运作的?考虑到异常被禁用,goto
是一个不错的选择而不是 return
吗?
最佳答案
正如@VladLazarenko 在评论中建议的那样,最好的方法是为此简单地编写您自己的作用域守卫。
但是,如果由于某些不明原因无法做到这一点,您可以简单地移动所有 //code with many returns here depending on conditions
进入一个单独的函数,然后在 Lock()
之间调用该函数和 Unlock()
电话。
您提到您禁用了异常(exception);如果不是这种情况,上述解决方案(嵌套函数)将需要额外的 try ... catch
在外部函数中构造,那么它也能正常工作。
关于c++ - 没有范围保护的安全锁定/解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729372/