安全锁定/解锁,无需护目镜

时间:2014-02-12 13:32:01

标签: c++ locking

我必须处理设计限制(依赖性问题)以不对互斥锁使用范围保护。

示例代码:

template<typename MutexType>
class Test
{
    MutexType myMutex;

public:
    void f()
    {
        myMutex.Lock();
        //code with many returns here depending on conditions
        myMutex.Unlock();
    }
};

在没有范围保护的情况下,还有其他安全的方式来处理多次退货吗?在概念被广泛使用之前,这是如何工作的?考虑到异常被禁用,goto是一个不错的选择,而不是return吗?

1 个答案:

答案 0 :(得分:6)

正如@VladLazarenko在评论中建议的那样,最好的方法就是为此编写自己的范围保护。

但是,如果由于某些不明原因而无法实现,您只需将所有//code with many returns here depending on conditions移动到单独的函数中,然后在Lock()Unlock()调用之间调用该函数。 / p>

你提到你有异常禁用;如果不是这种情况,上面的解决方案(嵌套函数)在外部函数中需要一个额外的try ... catch构造,那么它也可以工作。