信号 Signaling

  • 有时,你需要让某线程一直处于等待的状态,直至接受到其它线程发来的通知。这就叫做signaling(发送信号)。
  • 最简单的信号结构就是ManualResetEvent。
    • 调用它上面的WaitOne方法会阻塞当前的线程,直到另一个线程通过调用Set方法来开启信号。 ```csharp using System; using System.Threading;

namespace ThreadTest { class Program { static void Main(string[] args) { var signal = new ManualResetEvent(false);

  1. new Thread(() =>
  2. {
  3. Console.WriteLine("Waiting for signal ...");
  4. signal.WaitOne(); //阻塞当前线程 通过Set()开启
  5. signal.Dispose();
  6. Console.WriteLine("Got signal!");
  7. }).Start();
  8. Thread.Sleep(3000);
  9. signal.Set(); // 打开了信号
  10. }
  11. }

} ```

  • 调用完Set之后,信号会处于“打开”的状态。可以通过Reset方法将其再次关闭。