首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ThreadStatic属性时的不同结果

使用ThreadStatic属性时的不同结果
EN

Stack Overflow用户
提问于 2016-07-13 17:52:38
回答 2查看 29关注 0票数 1

我尝试运行一个使用ThreadStatic属性的代码,由于某种原因,显示了不同的结果。

代码语言:javascript
复制
[ThreadStatic]
    public static int _field;
    public static void Main(string[] args)
    {
        new Thread(() =>
        {
            for(int x = 0; x < 10; x++)
            {
                _field++;
                Console.WriteLine("Thread A: {0}", _field);
            }
        }).Start();

        new Thread(() =>
        {
            for(int x = 0; x < 10; x++)
            {
                _field++;
                Console.WriteLine("Thread B: {0}", _field);
            }
        }).Start();

        Console.ReadKey();
    }

结果1:

结果2:

有人能解释一下为什么吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-13 19:54:02

当您在多个线程上执行代码时,执行的顺序变得有些不可预测。你可能一遍又一遍地得到完全相同的结果,但它会做一些不同的事情。

这种不一致的行为是可以的,只要你不依赖于一致的行为。把它想象成两个人在画一座建筑--一个从后面开始,一个从前面开始,因为它速度更快,而且一个先完成另一个并不重要。

这个DotNetFiddle演示了。它将一串连续的数字放入一个ConcurrentQueue中,然后使用多个线程将其先入先出移到另一个队列中。您可能会期望它们总是以相同的顺序到达第二个队列,而且通常是这样的。但偶尔他们不知道。

意识到这种行为是非常重要的。否则,我们可以编写多线程代码,我们测试它,它似乎是以一种方式工作,然后,我们得到不可预测的结果,偶尔发生,但我们不知道为什么,我们不能重复,当调试。如果发生这种情况,那么问题就很难找到了。但这只是一个问题,如果我们依赖的行为是不可预测的。

票数 1
EN

Stack Overflow用户

发布于 2016-07-13 17:55:58

因为您无法控制线程何时获得CPU时间间隔的时间。所以每次运行的顺序都是不同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38358589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档