我这样声明数组private double[] array = new double[length]
。在一个线程中更新此数组项并在另一个线程中读取是否安全?我会有最新的价值吗?
注意我不枚举数组。我只通过索引访问它的项目。
我这样声明数组private double[] array = new double[length]
。在一个线程中更新此数组项并在另一个线程中读取是否安全?我会有最新的价值吗?
注意我不枚举数组。我只通过索引访问它的项目。
数组不是线程安全的,来自MSDN:
通过集合进行枚举本质上不是线程安全的过程。即使一个集合被同步,其他线程仍然可以修改该集合,这会导致枚举器抛出异常。为了保证枚举过程中的线程安全,您可以在整个枚举过程中锁定集合,也可以捕获其他线程更改导致的异常。
如果您一次只更新单个项目,我认为您会很安全,但除非我找到证明这一点的文档,否则我不会相信它。
挥发性不保证价值的新鲜度。它阻止了一些优化,但不保证线程同步。
Double 不保证自动更新。因此,在没有同步的情况下更新/读取双精度数组根本不是线程安全的,因为您可能会读取部分写入的值。
不,他们不是。您应该使用信号量或其他方法设计锁定系统以确保线程安全。您可以检查生产者/消费者问题。