另一個同步策略是手控技術,System.Threading命名空間中的一些可以用于手控同步的類。ManualResetEvent類用來使線程處于等待狀態,它有2種狀態:有信號(True)或無信號(False)。還有2個重要方法:Reset()和Set()。
下面代碼說明Reset()方法的用法:
using System; using System.Threading;
namespace ManualReset { class Reset { [STAThread] static void Main() { ManualResetEvent manRE; manRE=new ManualResetEvent(true); // 賦給信號量 bool state=manRE.WaitOne(1000,true); Console.WriteLine("ManualResetEvent After first waitone "+state);
manRE.Reset(); //設置ManualResetEvent狀態為無信號量 state=manRE.WaitOne(5000,true); Console.WriteLine("ManualResetEvent After second waitone "+state); } } }
運行結果:
下面代碼說明Set()方法的用法:
using System; using System.Threading; namespace ManualSet { class Set { [STAThread] static void Main(string[] args) { ManualResetEvent manRE; manRE=new ManualResetEvent(false); Console.WriteLine("Before waitone"); bool state=manRE.WaitOne(5000,true); Console.WriteLine("ManualResetEvent After first waitone "+state);
manRE.Set(); //將其狀態設為有信號量 Thread.Sleep(3000); state=manRE.WaitOne(5000,true); Console.WriteLine("ManualResetEvent After second waitone "+state); } } }
運行結果:
|