当前位置:  开发笔记 > 编程语言 > 正文

将Thread.VolatileWrite()与数组参数一起使用

如何解决《将Thread.VolatileWrite()与数组参数一起使用》经验,为你挑选了1个好方法。

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

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



1> Marc Gravell..:

VolatileWrite仅在您也使用时有用VolatileRead; 的volatile修改更容易使用,但我不知道它会不会是简单的使用同步-也许是ReaderWriterLockSlim(因为它听起来像是你有很多的读者).

Interlocked.Exchange简单地执行get和set作为原子操作; 它不会(AFAIK)提出任何波动性声明(事实上,编译器甚至会告诉您一个volatile字段volatile在被用作ref参数时不会被视为).


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

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有