考虑一下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Multithreading
{
class Program
{
static int result = 0;
static void changeResult1()
{
result = 1;
}
static void changeResult2()
{
result = 2;
}
static void changeResult3()
{
result = 3;
}
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(changeResult1));
Thread t2 = new Thread(new ThreadStart(changeResult2));
Thread t3 = new Thread(new ThreadStart(changeResult3));
t1.Start();
t2.Start();
t3.Start();
Console.WriteLine(result);
}
}
}
我很确定这段代码不是同步的,这意味着每次执行代码 (0,1,2,3) 时 result
应该是不同的。在我看来,如果主线程在任一线程启动之前完成,结果甚至可以是 0
。
但是我在屏幕上反复得到 2
作为结果。
为什么?
最佳答案
Is this code correctly synchronized ?
没有。
meaning that result should be different each execution of the code (0,1,2,3) .
为什么那是真的?您没有为此声明提供任何理由。
代码同步不正确,这意味着有很多可能的结果。你正在接受一个事实——缺乏正确的同步意味着我不知道会发生什么——并从中推断出一个完全不受支持的结论——每个人的观察结果都会不同执行。 “我不知道会发生什么”的正确推论是您不知道任何执行时会发生什么;特别是您不知道大量运行的行为将具有任何特定分布。
Why ?
为什么?您注意到 2 是一个可能的结果,您正在得到一个可能的结果。你做同样的事情两次,结果是一样的;这并不奇怪。仅仅因为允许运行时产生许多不同的结果并不意味着它必须产生许多不同的结果。做同样的事情两次通常会产生非常相似的结果。
关于c# - 为什么我用这个不同步的代码反复得到相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33580350/