我正在使用C++,并且正在使用Boost库互斥体,recursive_mutex和其他同步对象。

我经常有以下模式:

  • void RebuildAll()。此功能进行了许多内部更改。
  • 无效DoSomethingA()。使用RebuildAll构建的内容进行一些工作。
  • 无效DoSomethingB()。使用RebuildAll构建的内容进行一些工作。
  • 无效DoSomethingC()。使用RebuildAll构建的内容进行一些工作。
  • ...

  • 可以从不同的线程调用函数。我希望能够并行执行DoSomethingA(),DoSomethingB()和DoSomethingC()。但是,当调用RebuildAll()时,我需要确保未执行DoSomething函数。

    有什么可以帮助我保护这些功能的吗?

    最佳答案

    这通常称为reader-writer锁。读写器锁定的规则是:

  • 可以在任何给定时间获取任何数量的读取锁,大概是由不同的线程获取的。
  • 只有所有写入者都完成后,只有一个写入者才能获得该锁。
  • 作者拥有该锁时,没有读者可以获取该锁。

  • 在您的示例中,RebuildAll()将是作家,而DoSomethingA()DoSomethingC()将是读者。

    Boost具有名为 boost::shared_mutex 的读写器锁的实现。但是,这尚未在标准库中。

    07-26 07:09