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);
                  }
          }}

C#的生产者和消费者 实例_数据