標籤:col cond 建構函式 mes 理解 static sleep 迭代 name
不得不說,C#的同步線程的機制是真的多。
各式各樣。幾乎各種情境下都有可以使用的同步機制。
今天說的,就是比較有意思了。
等待的機制很簡單,單純的等待。 使用的方法我就等。 等待的東西或者內容則是你自己設定的。
相當好理解了。
書上這玩意迭代的作用比較大。
class Program { static Barrier barrier = new Barrier(1,b=>Console.WriteLine($"End of phase{b.CurrentPhaseNumber+1}")); static void PlayMusic(string name,string message,int seconds) { for (int i = 2; i < 3; i++) { Console.WriteLine("----------------------------------------------------"); Thread.Sleep(TimeSpan.FromMilliseconds(seconds)); Console.WriteLine($"{name} finishes to {message}"); barrier.SignalAndWait(); } } static void Main(string[] args) { var t1 = new Thread(() => PlayMusic("m1", " good music", 5)); var t2 = new Thread(() => PlayMusic("m2", "bad music", 5)); t1.Start(); t2.Start(); Console.ReadKey(); } }
特殊的地方是 Barrier在執行個體化的時候向建構函式傳參的時候,
第一個參數 是共有幾次或者理解成有幾個不同的地方或者線程來使用Barrier
第二個參數 是可以為NULL的,是一個回呼函數。什麼時候使用呢就是當Barrier使用了SignalAndWait方法的時候就會調用。等待內容也是這裡
剩下就是看SignalAndWait方法了。
《C#多線程編程實戰》2.8 Barrier