简单的C ++容器类,对于写入是线程安全的

时间:2010-04-21 19:58:34

标签: c++ data-structures parallel-processing thread-safety

我正在使用C ++中的OpenMP编写一个多线程程序。有一次,我的程序分成许多线程,每个线程都需要将“作业”添加到某个容器中,以跟踪所有添加的作业。每个作业都可以是指向某个对象的指针。

基本上,我只需要同时从多个线程添加指向某个容器的指针。

是否有一个表现良好的简单解决方案?经过一些谷歌搜索,我发现STL容器不是线程安全的。有些stackoverflow threads解决了这个问题,但没有一个能够就一个简单的解决方案达成共识。

2 个答案:

答案 0 :(得分:7)

没有内置方法可以做到这一点。您可以简单地使用锁来保护现有容器类型之一。让每个线程使用它自己的容器,最后将结果合并在一起可能是个更好的主意。

答案 1 :(得分:1)

使用互斥或​​类似的同步原语来控制对链表的访问并不是很困难,所以我建议你先尝试一下。

如果它执行得太差而无法使用它,请尝试这样做:为每个线程提供自己的作业队列,并让作业消费者依次检查所有队列。这样每个队列只有一个读者和一个编写器,因此无锁实现相对简单。我的意思是它可能适用于您的平台;你不应该试图自己写。