class Program
{
//写线程将数据写入myData
static int myData = 100;
//读写次数
const int readWriteCount = 10;
//false:初始时没有信号
static AutoResetEvent autoResetEvent = new AutoResetEvent(true);
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);
Console.Read();
//主(写)线程将数据写入
myData = i;
//主(写)线程发信号,说明值已写过了
//即通知正在等待的线程有事件发生
autoResetEvent.Set();//这句话是关键,给子线程发送信号
Thread.Sleep(0);
if (i == 4)
{
readerThread.Abort();
}
}
//终止线程
}
static void ReadThreadProc()
{
while (true)
{
//在数据被写入前,读线程等待(实际上是等待写线程发出数据写完的信号)
autoResetEvent.WaitOne();
Console.WriteLine("{0} reading : {1}", Thread.CurrentThread.Name, myData);
}
}
}
本文通过一个具体的示例展示了如何使用AutoResetEvent实现主线程与子线程间的通信。主线程负责更新共享变量myData,并通过AutoResetEvent通知读取线程进行数据读取。

被折叠的 条评论
为什么被折叠?



