C#的生产者和消费者 实例

class Program
{
    //写线程将数据写入myData
    static int myData = 100;

    //读写次数
    const int readWriteCount = 20;

    //false:初始时没有信号
    //static ManualResetEvent autoResetEvent = new ManualResetEvent(false);
    static AutoResetEvent autoResetEvent = new AutoResetEvent(false);
    static AutoResetEvent ReadautoResetEvent = new AutoResetEvent(false);
  static void Main(string[] args)
  {
    //开启一个读线程(子线程)
    Thread readerThread = new Thread(new ThreadStart(ReadThreadProc));
    readerThread.Name = "ReaderThread";
    readerThread.Start();

    for (int i = 1; i <= readWriteCount; i++)
    {

      Console.WriteLine("MainThread writing : {0}", i);

      //主(写)线程将数据写入
      myData = i;

      //主(写)线程发信号,说明值已写过了
      //即通知正在等待的线程有事件发生
      autoResetEvent.Set();

      ReadautoResetEvent.WaitOne();


      Thread.Sleep(0);
     }

    //终止线程
    readerThread.Abort();

    Console.ReadLine();
  }

  static void ReadThreadProc()
  {
      while (true)
      {
        ReadautoResetEvent.Set();
        //在数据被写入前,读线程等待(实际上是等待写线程发出数据写完的信号)
        autoResetEvent.WaitOne();
        Console.WriteLine("{0} reading : {1}", Thread.CurrentThread.Name, myData);
      }
  }

}

 

posted @ 2021-01-01 19:03  MaxBruce  阅读(419)  评论(0)    收藏  举报