【发布时间】:2010-04-21 19:58:34
【问题描述】:
我正在使用 C++ 中的 OpenMP 编写一个多线程程序。在某一时刻,我的程序分叉成许多线程,每个线程都需要将“作业”添加到某个容器中,以跟踪所有添加的作业。每个作业都可以只是指向某个对象的指针。
基本上,我只需要同时从多个线程添加指向某个容器的指针。
有没有表现良好的简单解决方案?经过一番谷歌搜索,我发现 STL 容器不是线程安全的。一些stackoverflow threads 解决了这个问题,但没有人就简单的解决方案形成共识。
【问题讨论】:
-
除非您有非常具体的使用要求,否则使用列表以外的任何类型的容器几乎总是更好。
std::deque和std::vector在绝大多数情况下要好得多。 (std::stack默认使用deque实现) -
TBB 提供了一些 -> threadingbuildingblocks.org
标签: c++ data-structures parallel-processing thread-safety