gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:42:47 25 4
gpt4 key购买 nike

我想使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com