c++ - 线程安全容器

标签 c++ multithreading

伪代码中有一些示例性的容器类:

class Container
{
public:
  Container(){}
  ~Container(){}
  void add(data new)
  {
    // addition of data
  }
  data get(size_t which)
  {
    // returning some data
  }
  void remove(size_t which)
  {
    // delete specified object
  }

private:
  data d;
};

如何使这个容器成为线程安全的?我听说过互斥锁——这些互斥锁应该放在哪里?互斥锁对于一个类应该是静态的还是在全局范围内?在 C++ 中执行此任务的好的库是什么?

最佳答案

首先,只要您要使用多个实例,互斥锁对于一个类就不应该是静态的。在很多情况下,您应该或不应该使用它们。所以没有看到你的代码很难说。请记住,它们用于同步对共享数据的访问。所以将它们放在修改或依赖对象状态的方法中是明智的。在您的情况下,我会使用一个互斥锁来保护整个对象并锁定所有三种方法。喜欢:

class Container
{
public:
  Container(){}
  ~Container(){}
  void add(data new)
  {
    lock_guard<Mutex> lock(mutex);
    // addition of data
  }
  data get(size_t which)
  {
    lock_guard<Mutex> lock(mutex);
    // getting copy of value
    // return that value
  }
  void remove(size_t which)
  {
    lock_guard<Mutex> lock(mutex);
    // delete specified object
  }

private:
  data d;
  Mutex mutex;
};

关于c++ - 线程安全容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684428/

相关文章:

c++ - Boost 的链接器错误,在丢弃的部分中引用

multithreading - 搞乱线程计时的工具?

java - 为什么我们在这个类方法中使用同步块(synchronized block)?

c++ - 如何运行不阻塞我的主终端并允许多任务处理的 gtkmm 应用程序

java多线程问题(相同的运行时间)

c++ - 如何使用 Savitzky-Golay 平滑系数计算导数

c++ - 为什么异常不退出程序?

c++ - 共享内存、MPI 和排队系统

c++ - Winsock 的 send() 工作异常

java - ThreadLocalRandom与共享静态Random实例性能对比测试