gpt4 book ai didi

c++ - 相互调用的互斥函数

转载 作者:可可西里 更新时间:2023-11-01 16:26:44 28 4
gpt4 key购买 nike

我有两个函数 foobar 这两个函数应该是互斥的,因为它们对相同的数据进行操作。但是 foo 复制了很多 bar 的代码,所以我想重构 foo 来调用 bar >.

这是一个问题,因为我不能对这两个函数使用一个互斥体,因为 foo 在调用 bar 时会死锁。因此,我不想“相互排斥”,而只想“与不同线程相互排斥”。

有实现这个的模式吗?我正在使用 C++,如果我需要类似 shared_mutex 的东西,我可以使用 C++14/boost。

最佳答案

定义一个私有(private)的“未锁定”函数并在 foobar 中使用它:

void bar_unlocked()
{
// assert that mx_ is locked
// real work
}

void bar()
{
std::lock_guard<std::mutex> lock(mx_);
bar_unlocked();
}

void foo()
{
std::lock_guard<std::mutex> lock(mx_);
// stuff
bar_unlocked();
// more stuff
}

关于c++ - 相互调用的互斥函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218929/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com