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

use*_*112 5 c++ performance multithreading vector

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

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

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

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

R. *_*des 12

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

  • @peekay:添加到向量是一个写. (9认同)

jua*_*nza 7

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