我必须处理设计限制(依赖性问题)以不对互斥锁使用范围保护。
示例代码:
template<typename MutexType>
class Test
{
MutexType myMutex;
public:
void f()
{
myMutex.Lock();
//code with many returns here depending on conditions
myMutex.Unlock();
}
};
在没有范围保护的情况下,还有其他安全的方式来处理多次退货吗?在概念被广泛使用之前,这是如何工作的?考虑到异常被禁用,goto
是一个不错的选择,而不是return
吗?
答案 0 :(得分:6)
正如@VladLazarenko在评论中建议的那样,最好的方法就是为此编写自己的范围保护。
但是,如果由于某些不明原因而无法实现,您只需将所有//code with many returns here depending on conditions
移动到单独的函数中,然后在Lock()
和Unlock()
调用之间调用该函数。 / p>
你提到你有异常禁用;如果不是这种情况,上面的解决方案(嵌套函数)在外部函数中需要一个额外的try ... catch
构造,那么它也可以工作。