C Sharp

Threads

  • 執行緒(線程):傳統的程式執行只會有一個執行緒,執行緒無法單獨存在活執行,只能附屬在Program之下。

  • 多工(Multitasking):如同時在微軟啟動小畫家、計算盤、上網。例如:影片串流—可以邊下載邊看。

  • Thread Class

方法 說明
Suspend() 暫停執行執行緒
Resume() 重新啟動Suspend()後的執行緒
Sleep(5) 停止5毫秒
Join() 讓呼叫的執行緒等待,直到另外執行緒結束後才啟動
Start() 啟動執行緒
  • Thread Property
屬性 說明
Name 執行緒的名稱
IsAlive 執行緒是否在執行中,傳回true,false
ThreadState 執行緒狀態
Priority 執行緒優先權
Thread.CurrentThread 取得當前的執行緒參考

建立執行緒

//ButtonClick
OutPut.Msg="";
SumeClass sum1= new SumClass();

Thread t1 = new Thread(new ThreadStart(sum1.Sum))
tid1.Name="執行緒A";
Thread t2 = new Thread(new ThreadStart(sum1.Sum))
tid2.Name="執行緒B";
t1.Start(); //開始執行
t2.Start();
t1.Join(); //確定結束
t2.Join();
Consoloe.WriteLine=Output.Msg;


class Output
{
    public static string Msg;
    public static void Add(string str)
    {
        Msg += str + "\n"; //換行
    }

}

class SumClass
{
    long temp = 0
    for (int i =1 , i<=3 , i++)
    {
        Output.Add(Thread.CurrentThread.Name + "-" + i )
        
        Thread.Sleep(new Random().Next(50,100));
        temp +=1
    }
    Output.Add(Thread.CurrentThread.Name+"總和="+temp)

}

結果

  • 結果不一定有固定的順序。 執行緒A-1 執行緒B-1 執行緒B-2 執行緒A-2 執行緒A-3 執行緒B-3 執行緒A總和=6 執行緒B總和=6

Synchronization

  • 執行緒同步:指兩個或兩個以上執行緒同時存取相同資料。例如當執行緒A存取資料時就將此鎖定 ; 不讓B、C…存取,直到A處理完才換人。

    接力賽跑的概念