这种情况下有什么样的多线程保护?

时间:2012-12-19 22:14:08

标签: c++ multithreading boost boost-thread

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

我经常有以下模式:

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

Boost有一个名为boost::shared_mutex的读写器锁的实现。但是,这还没有出现在标准库中。