gpt4 book ai didi

c# - 说明 C# 中 volatile 关键字的用法

转载 作者:IT王子 更新时间:2023-10-29 03:37:45 26 4
gpt4 key购买 nike

我想编写一个小程序,直观地说明 volatile 关键字的行为。理想情况下,它应该是一个程序,它对非 volatile 静态字段执行并发访问,并因此获得不正确的行为。

在同一个程序中添加 volatile 关键字应该可以解决问题。

这是我未能实现的目标。即使尝试多次,启用优化等,我总能在没有“volatile”关键字的情况下获得正确的行为。

你对这个话题有什么想法吗?你知道如何在一个简单的演示应用程序中模拟这样的问题吗?它取决于硬件吗?

最佳答案

我已经实现了一个工作示例!

主要思想来自 wiki,但针对 C# 进行了一些更改。 wiki 文章针对 C++ 的静态字段演示了这一点,看起来 C# 总是小心地将请求编译到静态字段......我用非静态字段做了一个例子:

如果您在 Release 模式下运行此示例并且没有调试器(即使用 Ctrl+F5),那么行 while (test.foo != 255) 将被优化为“while(true)”并且此程序永远不会返回。但是在添加 volatile 关键字后,您总是得到“OK”。

class Test
{
/*volatile*/ int foo;

static void Main()
{
var test = new Test();

new Thread(delegate() { Thread.Sleep(500); test.foo = 255; }).Start();

while (test.foo != 255) ;
Console.WriteLine("OK");
}
}

关于c# - 说明 C# 中 volatile 关键字的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/133270/

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