想知道我是否可以在这种情况下了解我应该做些什么。
假设我有4到8个线程,并且我有一个永远不会被写入的值向量,只能被线程读取。
我可以选择为每个线程创建一个向量副本,然后在线程之间没有线程锁定,试图访问共享副本。或者,我可以锁定向量的一个副本,并让所有线程访问它。
与复制向量相比,线程锁的延迟是多少?矢量必须有多大,才能使锁的开销比复制矢量更快?
答案 0 :(得分:11)
如果没有线程写入它,您可以安全地共享它而无需任何锁定或复制。数据争用只有在涉及写访问时才会发生。
答案 1 :(得分:6)
假设在线程开始访问后向量没有改变,则无需锁定它。如果填充向量的线程在读取器线程开始读取之前完成填充,则无需进一步同步即可安全。