我声明数组private double[] array = new double[length]
。在一个线程中更新此数组项并读入另一个线程是否安全?我有最新的价值吗?
注意我没有枚举数组。我只能通过索引访问它的项目。
答案 0 :(得分:4)
数组不是线程安全的,来自MSDN:
通过集合枚举本质上不是线程安全的 程序。即使集合是同步的,其他线程也可以 仍然修改集合,这会导致枚举器抛出一个 例外。为了在枚举期间保证线程安全,您可以 要么在整个枚举过程中锁定集合,要么抓住它 由其他线程所做的更改导致的异常。
如果您一次只更新单个项目,我认为您会安全,但我不相信它,除非我找到证明它的文档。
答案 1 :(得分:2)
Volatile不保证值的新鲜度。它可以防止某些优化,但不保证线程同步。
Double不能保证updated atomically。因此,在没有同步的情况下更新/读取双精度数组将不会是线程安全的,或者没有易失性,因为您可能会读取部分写入的值。
答案 2 :(得分:0)
不,他们不是。您应该使用信号量或其他方法设计锁定系统,以确保线程安全。您可以查看producer/consumer problem。