scd*_*dmb 8 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;
};