Thread thread1 = new Thread(new ThreadStart(c1.print));
Thread thread2 = new Thread(new ThreadStart(c2.print));
Thread thread3 = new Thread(new ThreadStart(c3.print));
thread1.Start();
thread2.Start();
thread3.Start();
當我運行上面的代碼時,有時會在線程1和線程2之前打印線程3,即使我指定了thread1來啓動第一個線程。爲什麼會發生?爲什麼線程3在線程1之前啓動,即使我指定線程1在代碼中首先啓動?
對線程的相對執行順序做任何形式的假設都會導致你陷入麻煩。他們可能在單獨的CPU /內核上運行。不要假設。如果您需要以特定順序發生的事情,請使用同步原語來確保發生這種情況。 – spender
簡而言之,這就是多線程的工作原理。調度程序決定每個可用線程何時有機會運行。 –
僅僅因爲您指定它首先啓動,並不意味着它首先被授予訪問CPU的處理時間。 – Draken