c – 相互排斥的功能

前端之家收集整理的这篇文章主要介绍了c – 相互排斥的功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个函数foo和bar,它们应该相互排斥,因为它们在相同的数据上操作.然而,foo从bar重复了很多代码,所以我想重构foo来调用bar.

这是一个问题,因为我不能使用一个互斥体的这两个功能,因为那时foo会死锁时调用吧.所以而不是“互斥”我只想“从不同的线程互斥”.

有没有实现这个模式?我正在使用C,如果我需要像shared_mutex这样的东西,我可以C 14 / boost.

解决方法

定义一个私有的“解锁”功能,并使用foo和bar:
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&C++相关文章