6

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

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

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

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

4

2 回答 2

12

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

于 2012-05-30T21:10:27.103 回答
7

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

于 2012-05-30T21:11:44.710 回答