我正在使用C ++中的OpenMP编写一个多线程程序。有一次,我的程序分成许多线程,每个线程都需要将“作业”添加到某个容器中,以跟踪所有添加的作业。每个作业都可以是指向某个对象的指针。
基本上,我只需要同时从多个线程添加指向某个容器的指针。
是否有一个表现良好的简单解决方案?经过一些谷歌搜索,我发现STL容器不是线程安全的。有些stackoverflow threads解决了这个问题,但没有一个能够就一个简单的解决方案达成共识。
答案 0 :(得分:7)
没有内置方法可以做到这一点。您可以简单地使用锁来保护现有容器类型之一。让每个线程使用它自己的容器,最后将结果合并在一起可能是个更好的主意。
答案 1 :(得分:1)
使用互斥或类似的同步原语来控制对链表的访问并不是很困难,所以我建议你先尝试一下。
如果它执行得太差而无法使用它,请尝试这样做:为每个线程提供自己的作业队列,并让作业消费者依次检查所有队列。这样每个队列只有一个读者和一个编写器,因此无锁实现相对简单。我的意思是它可能适用于您的平台;你不应该试图自己写。