小编pos*_*man的帖子

具有两个独占锁组的共享锁

我有两个方法“log”和“measure”,它们永远不应该同时执行。所以我尝试使用“std::mutex”来执行此操作,如下所示:

void log(std::string message)
{
    mtx.lock();
    someLogFunctionality();
    mtx.unlock();
}

void measure()
{        
    mtx.lock();
    someMeasureFunctionality();
    mtx.unlock();
}
Run Code Online (Sandbox Code Playgroud)

现在事实证明,还可以在不锁定的情况下并行多次调用“log”,这同样适用于“measure”。(原因:someLogFunctionality() 和 someMeasureFunctionality() 互相干扰,但同一个方法可能会并行调用多次)

然后我查看了“std::shared_mutex”,但对我来说有两个问题:

1.)使用shared_mutex,我只能将lock_shared用于其中一种方法(日志或测量),但另一个方法必须使用排他锁(并且不能再次并行执行多次)

void log(std::string message)
{
    mtx.lock_shared();
    someLogFunctionality();
    mtx.unlock_shared();
}

void measure()
{        
    mtx.lock(); // This should also be shared but among another "group"
    someMeasureFunctionality();
    mtx.unlock();
}
Run Code Online (Sandbox Code Playgroud)

2.)我无法使用C++17(受我正在使用的环境的限制)

您对我如何实现这一点有什么建议吗?

c++ mutex semaphore locking

5
推荐指数
1
解决办法
503
查看次数

标签 统计

c++ ×1

locking ×1

mutex ×1

semaphore ×1