gpt4 book ai didi

c# - 内存障碍和大型结构?

转载 作者:行者123 更新时间:2023-11-30 19:00:44 25 4
gpt4 key购买 nike

假设我有一个包含 100 个字节的结构。我对以下代码有什么保证?

m_myLargeStruct = someValue; // copying 100 bytes
Thread.MemoryBarrier();

// Executed by another thread, after "Thread.MemoryBarrier" was called by the first thread
Console.WriteLine(m_myLargeStruct.ToString());

内存模型是否保证在放置内存屏障后完成 100 字节的复制?还是内存屏障只适用于处理器架构大小的类型? (32 位为 4 个字节,64 位为 8 个字节)。
这就是 volatile 关键字只适用于原始类型的原因吗? (如果我将一个 8 字节成员声明为 volatile,这意味着将使用互锁指令来更改它的值?[因为在 32 位机器上不能保证大于 4 字节的类型的原子性])。

我希望我已经足够清楚了.. :)
谢谢

最佳答案

除非阅读线程也有内存障碍,否则我认为不会对您有多大帮助。

就我个人而言,我会回避:

  • 那么大的结构
  • 深入研究内存模型以编写无锁代码

...除非您有非常重要的理由这样做。对可变数据进行正确的无锁编码非常;我相信即使是专家也很挣扎。我通常发现“为访问数据的每个 block 锁定”方法更容易正确,并且在 99% 的情况下在性能方面都很好。

我相信 Microsoft 的 PFX 团队能够获得正确的无锁编码,并为他们提供我可以使用他们的代码相对轻松地编写自己的无锁程序的方法。我不相信自己能把这种事情做好。如果我需要显式使用内存屏障,那可能意味着我太努力了。

关于c# - 内存障碍和大型结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1730761/

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