gpt4 book ai didi

c# - 多处理器系统中 volatile 关键字的成本是多少?

转载 作者:可可西里 更新时间:2023-11-01 08:46:34 26 4
gpt4 key购买 nike

我们遇到了性能问题,一个潜在的罪魁祸首是集中使用 volatile 单例。具体代码形式为

class foo {
static volatile instance;
static object l = new object();

public static foo Instance {
if (instance == null)
lock(l) {
if (instance == null)
instance = new foo();
}

return foo();
}
}

这是在一个 8 路盒子上运行的,我们看到上下文切换到每秒 500,000 次。典型的系统资源很好——25% 的 cpu 利用率、25% 的内存利用率、低 IO、无分页等。

使用 volatile 字段会导致内存屏障或任何类型的 cpu 缓存重新加载吗?还是每次都只在主内存之后,只针对那个字段?

最佳答案

lock 确实会引起内存屏障,因此如果您总是在锁中访问实例,则不需要 volatile。

根据 this site :

The C# volatile keyword implements acquire and release semantics, which implies a read memory barrier on read and a write memory barrier on write.

关于c# - 多处理器系统中 volatile 关键字的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1002739/

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