======关于多线程的一个示例,困惑,盼高手解惑=======

愚者只看星不看答案 愚者只看星不看答案 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如果线程之间有共同的引用,则它们共享数据。例如下面代码::

1: class ThreadTest
2: {
3: bool done;
4:
5: static void Main()
6: {
7: ThreadTest tt = new ThreadTest(); // Create a common instance
8: new Thread(tt.Go).Start();
9: tt.Go();
10: }
11:
12: // Note that Go is now an instance method
13: void Go()
14: {
15: if (!done) { done = true; Console.WriteLine("Done"); }
16: }
17: }
18:
19:

因调用Go()方法的两个线程,拥有同一个引用,所以结果打印出来的是一个 ”Done”而不是两个。

上面都是那个示例的原话。

但是我的理解下:
假设那个实例化的线程执行到GO方法中的if(!done)后,该线程的时间片已到或调度程序把该线程挂起。主线程此时执行,并且完整的执行了整个方法。因为刚才那个实例化的线程还未来得及修改done的值为true,此时该实例化的线程再次被调度,此时,从挂起的地方if(!done){ 这里开始执行(因为已经在挂起前已经做过了判断),依然会执行后面的done=true.....,也就是说完全存在Done被输出两次的可能性。

我的说法正确吗?请指教。
...全文
评论 41
收藏 已收藏
分享
返回顶部
愚者只看星不看答案
C# 111,128 成员 642,536 内容