是同时读取可变线程安全?

时间:2010-06-13 18:36:43

标签: multithreading

假设变量在读取过程中没有被修改的风险,那么两个或多个线程同时读取变量是否存在任何固有问题?

5 个答案:

答案 0 :(得分:10)

如果您的假设成立,则没有问题。

答案 1 :(得分:9)

此操作本身并不是线程安全的。

即使当前没有写入变量,以前对变量的写入可能还不是所有线程都可见。这意味着两个线程可以读取相同的值并获得不同的结果,从而产生竞争条件。

这可以通过内存障碍,正确使用volatile或其他一些机制来防止。我们需要更多地了解您的环境,特别是语言,以提供完整的解释。

稍微重述一下你的问题会产生更好的答案。假设没有更多的写入,并且所有先前的写入对当前线程都是可见的,那么从多个线程读取值是安全的。

答案 2 :(得分:3)

只要它是一个简单的变量,就没有风险。

如果是属性,读取它可能会产生副作用,因此不能保证线程安全。

答案 3 :(得分:0)

鉴于数据库通常可以使用shared read locks,任何数量的客户端都可以读取相同的块,我建议没有直接的固有问题。

答案 4 :(得分:0)

是三个字符。

编辑: 哎呦。是的,这是线程安全的。不,没有问题。人们通常会询问某些东西是否是线程安全的,而不是它的线程不安全。