C++ C++;线程安全对象

C++ C++;线程安全对象,c++,multithreading,boost,C++,Multithreading,Boost,这似乎是一个非常简单的问题,但在我所有的研究中,我都没有找到一个明确的例子 我正在尝试构建一个自定义类,该类包含可通过getter和setter函数访问的私有变量。这个类将在全局范围(extern)中实例化一次,并在我的应用程序中用作数据缓存。它将被多个线程同时使用,99%用于读取,速度非常重要。有没有什么方法可以允许并发读取而只锁定写入?(我想不会吧) 我是否只是将作用域互斥体作为getter和setter的第一行?或者,设计这个看似简单的物体的最佳方式是什么?任何例子或链接都将不胜感激(我很

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

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

我是否只是将作用域互斥体作为getter和setter的第一行?或者,设计这个看似简单的物体的最佳方式是什么?任何例子或链接都将不胜感激(我很难理解它)

我确实编译了Boost,所以它是可用的


我真的很感激

假设您的封装是正确的,getter和setter上的锁应该足够了

要提供并发读取,请查看读写器锁,它精确地提供了所需的同步级别。我认为这很合适


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

这一点都不简单。每一个细节都很重要。不幸的是,您的描述中很少有这样的内容。您可以使用一种或类似的同步机制来保护访问类成员,但是对于
const
getter方法,异步锁变量需要声明为
mutable
。共享的\u互斥体正是我想要的-谢谢!我最终实施了一个非常类似于以下内容的解决方案: