加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c#中的volatile关键字用途是什么?

发布时间:2020-12-15 06:18:57 所属栏目:百科 来源:网络整理
导读:我想看看在c#中实时使用Volatile关键字.但我无法投射最好的例子.下面的示例代码在没有Volatile关键字的情况下工作怎么可能? class Program{ private static int a = 0,b = 0; static void Main(string[] args) { Thread t1 = new Thread(Method1); Thread t
我想看看在c#中实时使用Volatile关键字.但我无法投射最好的例子.下面的示例代码在没有Volatile关键字的情况下工作怎么可能?
class Program
{
    private static int a = 0,b = 0;

    static void Main(string[] args)
    {
        Thread t1 = new Thread(Method1);
        Thread t2 = new Thread(Method2);

        t1.Start();
        t2.Start();

        Console.ReadLine();
    }

    static void Method1()
    {
        a = 5;
        b = 1;
    }

    static void Method2()
    {
        if (b == 1)
            Console.WriteLine(a);
    }
}

在上面的代码中,我得到一个值为5.如何在不使用volatile关键字的情况下工作?

解决方法

volatile关键字告诉编译器变量可以随时更改,因此它不应该优化读取和写入变量.

考虑这样的代码:

int sum;
for (var i = 0; i < 1000; i++) {
  sum += x * i;
}

由于变量x在循环内部没有变化,编译器可能会在循环外部读取变量,并在整个循环中使用相同的值.

如果将变量x设为volatile,则编译器将在每次使用变量时读取变量的值,因此如果更改其他线程中的值,则将立即使用新值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读