我測試簡單的代碼C#線程和鎖定
static Thread _readThread = null;
static private Object thisLock = new Object();
static int a = 1;
private static void ReadComPort()
{
lock (thisLock)
{
for (int i = 0; i < 3; i++)
{
Console.WriteLine(Thread.CurrentThread.Name + " " + a++.ToString());
Thread.Sleep(1000);
}
}
}
static void Main(string[] args)
{
for (int i = 0; i < 3; i++)
{
_readThread = new Thread(new ThreadStart(ReadComPort));
_readThread.IsBackground = true;
_readThread.Name = i.ToString();
_readThread.Start();
//Thread.Sleep(50);
}
Console.WriteLine("End");
Console.ReadKey();
}
但爲什麼執行順序和線程的混亂啓動: 0,2,1爲什麼呢?
控制檯輸出:
0 1
End
0 2
0 3
2 4
2 5
2 6
1 7
1 8
1 9
你*期待*和*爲什麼*?請注意,您的低迭代次數意味着*線程之間的任何交互*不太可能。 –
當一個線程啓動時,不能保證立即運行,也不會按照與其他線程相比被啓動的順序 –
您可以使用Task.ContinueWith',隊列來運行線程,隊列/優先級來同步對控制檯的訪問,還有什麼..應該是更多的,但絕對不會運行一些線程,並期望他們組織自己,因爲你沒有告訴他們... – Sinatr