我想实现一个类似数组的数据结构,允许多个线程同时修改/插入项目。我怎样才能在性能方面获得它?我在std :: vector周围实现了一个包装类,我使用了关键部分来同步线程。请看下面的代码。每次线程想要处理内部数据时,它可能必须等待其他线程。因此,我认为它的表现并不好。 :(有什么想法吗?
class parallelArray{
private:
std::vector<int> data;
zLock dataLock; // my predefined class for synchronizing
public:
void insert(int val){
dataLock.lock();
data.push_back(val);
dataLock.unlock();
}
void modify(unsigned int index, int newVal){
dataLock.lock();
data[index]=newVal; // assuming that the index is valid
dataLock.unlock();
}
};
答案 0 :(得分:1)
查看Boost库中的shared_mutex。这允许您拥有多个读者,但只有一个作者
答案 1 :(得分:0)
最好的方法是使用一些快速reader-writer lock。您执行只读访问的共享锁定和可写访问的独占锁定 - 这样就可以同时执行只读访问。
在用户模式的Win32 API中,Vista和更高版本中提供了Slim Reader/Writer (SRW) Locks。
在Vista之前,你必须自己实现读写器锁定功能,这是一项非常简单的任务。您可以使用一个临界区,一个事件和一个枚举/ int值来完成。虽然良好的实现需要更多的努力 - 我会使用手工制作的本地(堆栈分配)结构的链表来实现公平的等待队列。