这种情况需要哪种多线程保护?

4
我正在使用C++,并且我正在使用boost库的mutex、recursive_mutex和其他同步对象。
我经常有以下模式:
void RebuildAll()。这个函数会做很多内部的改变。
void DoSomethingA()。使用RebuildAll所建立的东西来完成一些工作。
void DoSomethingB()。使用RebuildAll所建立的东西来完成一些工作。
void DoSomethingC()。使用RebuildAll所建立的东西来完成一些工作。
...
这些函数可以从不同的线程中调用。我想同时执行DoSomethingA()、DoSomethingB()和DoSomethingC()。但是当调用RebuildAll()时,我需要确保这些DoSomething函数没有被执行。
有什么东西可以帮助我保护这些函数吗?

http://stackoverflow.com/questions/5213332/fastest-multi-reader-single-writer-protection-for-shared-resources-c - hookenz
1个回答

4
这通常被称为读写锁。读写锁的规则如下:
  • 可以在任何时候获取任意数量的读锁,可能由不同的线程获取。
  • 只有一个写者可以获取锁,而且只有在所有读者完成后才能获取。
  • 当写者拥有锁时,没有读者可以获取锁。

在您的示例中,RebuildAll()将是一个写者,DoSomethingA()DoSomethingC()将是读者。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接