C ++线程安全对象

时间:2014-03-18 22:16:04

标签: c++ multithreading boost

这似乎是一个非常简单的问题,但在我的所有研究中,我都找不到明确的例子......

我正在尝试使用getter和setter函数构建一个可以访问私有变量的自定义类。此类将在全局范围(extern)中实例化一次,并将在我的应用程序中用作数据缓存。它将被许多线程同时使用,99%用于读取,速度非常重要。有没有办法允许并发读取只是锁定写入? (我假设没有)

我是否只是将一个范围的互斥锁作为getter和setter的第一行?或者如何设计这个看似简单的物体的最佳方法?任何例子或链接都将非常感激(我很难绕过它)。

我确实编译了Boost,所以它可以使用。

我真的很感激!

1 个答案:

答案 0 :(得分:9)

假设你的封装是正确的,那么getter和setter上的锁就足够了。

要提供并发读取,请查看Readers-Writer锁定,它可以精确地提供所需的同步级别。我认为boost::shared_mutex符合要求。

由于这是一个缓存,如果您能够容忍过时的值,那么就性能而言,调查RCU或读取 - 复制 - 更新可能是值得的。用户空间RCU至少one library