.net - 使用带有数组参数的 Thread.VolatileWrite()

标签 .net multithreading

我想使用 Thread.VolatileWrite() (或等效函数)来更改 T[] 的值字段,以便所有其他线程立即看到更新的值。但是,该方法不提供通用版本,我无法使用 Object过载,因为它需要 ref参数。

还有其他选择吗?会Interlocked.Exchange<T>做这份工作?有没有更好的方法来实现我想做的事情?

最佳答案

VolatileWrite仅当您还使用 VolatileRead 时才有用; volatile修饰符更容易使用,但我想知道使用同步是否更简单 - 也许是 ReaderWriterLockSlim (因为听起来你有很多读者)。

Interlocked.Exchange<T>只需将 get 和 set 作为原子操作执行;它(AFAIK)没有做出任何波动性声明(实际上,编译器甚至告诉您 volatile 字段在用作 volatile 参数时不会被视为 ref)。


编辑以澄清“它(AFAIK)没有做出任何波动性声明” - Interlocked 的行为是可预测的,您应该立即在其他线程上看到更新只要他们也使用 Interlocked ;我的观点是,如果一个线程使用 Interlocked ,而另一个依赖于 volatile (与同一个领域交谈),我不知道有任何保证。对于所有访问,请坚持使用其中一个。

关于.net - 使用带有数组参数的 Thread.VolatileWrite(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/453232/

相关文章:

.net - 我们如何创建资源卫星程序集

.net - 使用 Json.NET 转换器反序列化属性

java - Android默认是多线程不用的吗?

python - 为列表中的项目生成一个新线程

php - 我应该使用 Laravel 队列来管理应用程序中的线程吗

c# - 来自 MTA 的 STA 调用

c# - 当 ThreadStart 例程返回时,线程是否会自动停止?

.net - 许多线程只需执行一项操作即可在.net中构建耗时的对象

.net - 在 .net CF 3.5 中获取特定时区?

multithreading - 切换到并行编码