对Vector的多线程,只读访问。复制还是锁定?

时间:2012-05-30 21:08:51

标签: c++ multithreading performance vector

想知道我是否可以在这种情况下了解我应该做些什么。

假设我有4到8个线程,并且我有一个永远不会被写入的值向量,只能被线程读取。

我可以选择为每个线程创建一个向量副本,然后在线程之间没有线程锁定,试图访问共享副本。或者,我可以锁定向量的一个副本,并让所有线程访问它。

与复制向量相比,线程锁的延迟是多少?矢量必须有多大,才能使锁的开销比复制矢量更快?

2 个答案:

答案 0 :(得分:11)

如果没有线程写入它,您可以安全地共享它而无需任何锁定或复制。数据争用只有在涉及写访问时才会发生。

答案 1 :(得分:6)

假设在线程开始访问后向量没有改变,则无需锁定它。如果填充向量的线程在读取器线程开始读取之前完成填充,则无需进一步同步即可安全。