【发布时间】:2011-07-17 20:14:33
【问题描述】:
我有以下代码(用 c# 编写,但可以很容易地翻译成您喜欢的语言...)
class Program
{
static int sharedState = 0;
static void Main(string[] args)
{
Thread t1 = new Thread(UpdateState);
Thread t2 = new Thread(UpdateState);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine("sharedState value is {0}.", sharedState);
}
static void UpdateState()
{
for (int i = 0; i < 10; i++)
sharedState++;
}
}
正如任何人都可以猜到的那样,这段代码创建了两个工作线程,它们将共享状态值递增 1,持续 10 次。代码在访问和写入共享值“sharedState”时没有任何同步机制(例如互斥锁、监视器或任何其他......),主线程正在等待两个worker完成他们的工作(Join)。 有人可以向我解释这段代码有什么问题吗,最后是否有可能 - 'sharedState' 的值是 2? (我的一个朋友被问到这个问题,他们告诉他这是可能的,我们都无法理解如何......) 顺便说一句 - 当我运行这段代码时,我每次都会得到 20...
【问题讨论】:
标签: c# .net multithreading synchronization thread-safety