伪代码中有一些示例性的容器类:
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/