【发布时间】:2012-06-21 18:17:12
【问题描述】:
我有一个多线程程序,它有一定数量的工人,每个工人都有一个'workerID',它本质上只是那个线程的唯一整数。我想使用结构向量来管理这些线程。我的问题是,如果线程 4 想要访问 myVector[4],而线程 8 想要访问 myVector[8],我会有问题吗?
【问题讨论】:
标签: c++ multithreading vector
我有一个多线程程序,它有一定数量的工人,每个工人都有一个'workerID',它本质上只是那个线程的唯一整数。我想使用结构向量来管理这些线程。我的问题是,如果线程 4 想要访问 myVector[4],而线程 8 想要访问 myVector[8],我会有问题吗?
【问题讨论】:
标签: c++ multithreading vector
如果你在进入多线程场景之前已经设置好了vector,然后你只想从多个线程中读取vector,不修改它,那么它是线程安全的。您甚至可以同时从两个以上的线程读取相同的元素,只要确保没有线程以任何方式修改向量。将向量及其所有元素视为只读。
但是,对于修改,标准库中的所有容器都不是线程安全的。您需要自己实现同步。
C++11已经引入了很多synchronization primitives,所以如果你的编译器支持,你可以使用它们。
【讨论】:
没有。跨线程管理向量类并不安全,您需要使用一些同步机制(例如互斥锁)来保护对std::vector<> 实例的读/写访问。
【讨论】:
除非他们使用相同的元素,否则您不会有问题 (afaik)。
但如果他们删除某些东西,或 push_back 某些东西等,那就是个坏主意。
为了安全起见,请使用锁。
【讨论】:
一般来说 std::vector 不是线程安全的。但你想做的是安全的。如果您只在多个线程中读取向量,这将起作用。如果每个线程只写入自己的偏移量,它也可以工作。如果您开始在线程中调整向量的大小,或者多个线程想要写入相同的偏移量,则绝对行不通。
【讨论】: