c++ - 没有范围保护的安全锁定/解锁

标签 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 吗?

最佳答案

正如@VladLazarenko 在评论中建议的那样,最好的方法是为此简单地编写您自己的作用域守卫。

但是,如果由于某些不明原因无法做到这一点,您可以简单地移动所有 //code with many returns here depending on conditions进入一个单独的函数,然后在 Lock() 之间调用该函数和 Unlock()电话。

您提到您禁用了异常(exception);如果不是这种情况,上述解决方案(嵌套函数)将需要额外的 try ... catch在外部函数中构造,那么它也能正常工作。

关于c++ - 没有范围保护的安全锁定/解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729372/

相关文章:

c++ - Spirit QI解析器结束EOM

c++ - 继承类的复制构造函数

c++ - 为什么 std::string 即使在删除后也会导致类中的内存泄漏

java - 同步方法不能作为锁工作?为什么不在计数上加锁

c# - 执行 Parallel.For 从 Array 计算数据的正确方法

c# - 你能锁定通用词典吗?

c++ - 错误 : Qualifiers dropped in binding reference of type x to initializer of type y

c++ - 将字符串转换为UTF8字符串所需

sql-server - 休眠/SQL Server : default lock mode

php - MySQL 锁 : order of unblocked threads