4

我这样声明数组private double[] array = new double[length]。在一个线程中更新此数组项并在另一个线程中读取是否安全?我会有最新的价值吗?

注意我不枚举数组。我只通过索引访问它的项目。

4

3 回答 3

4

数组不是线程安全的,来自MSDN

通过集合进行枚举本质上不是线程安全的过程。即使一个集合被同步,其他线程仍然可以修改该集合,这会导致枚举器抛出异常。为了保证枚举过程中的线程安全,您可以在整个枚举过程中锁定集合,也可以捕获其他线程更改导致的异常。

如果您一次只更新单个项目,我认为您会很安全,但除非我找到证明这一点的文档,否则我不会相信它。

于 2012-07-06T07:50:26.070 回答
2

挥发性不保证价值的新鲜度。它阻止了一些优化,但不保证线程同步。

Double 不保证自动更新。因此,在没有同步的情况下更新/读取双精度数组根本不是线程安全的,因为您可能会读取部分写入的值。

于 2012-07-06T08:03:31.983 回答
0

不,他们不是。您应该使用信号量或其他方法设计锁定系统以确保线程安全。您可以检查生产者/消费者问题

于 2012-07-06T08:15:44.617 回答