我是使用线程的新手,并且已经阅读了很多关于如何共享数据和保护数据的知识.但是我还没有真正掌握何时需要使用互斥锁和锁来保护数据.
以下是我将要解决的问题的描述.需要注意的重要一点是它对时间至关重要,因此我需要尽可能减少开销.
我有两个固定大小的双阵列.
第一个数组将为后续计算提供数据.线程将从中读取值,但永远不会被修改.任何线程都可以在某个时间读取元素.
第二个数组将用于存储
线程执行的计算结果.此数组的元素将仅由一个线程更新,并且可能仅在将结果值
写入其中时才更新一次.
我的问题呢?
每次从只读数组访问数据时,是否真的需要在线程中使用互斥锁?如果是这样你能解释原因吗?
我是否需要在写入结果数组时在线程中使用互斥锁,即使这将是唯一写入此元素的线程?
我应该使用原子数据类型吗?如果我这样做会有任何重要的时间吗?
这类问题的答案似乎很多 - 不,如果您的变量是对齐的,则不需要互斥锁.我的数组元素在这个例子中是否可以对齐,还是有某种方法可以确保它们是?
代码将在64位linux上实现.我打算使用Boost库进行多线程处理.
感谢所有的回复和评论, 我一直在仔细研究这个问题并在网上看了好几天,并且一旦发布了答案,清楚的解释就会在几秒钟之内回来.有一个"已接受的答案",但所有的答案和评论都同样有用.再次感谢