用一个三国演义的典故来写段示例代码:
话说曹操率领80W大军准备围剿刘备和孙权,面对敌众我寡的情况,诸葛亮与周瑜想到了一个妙计,用装满火药桶的大船去冲击曹操连在一起的战船,计划都安排好了,可谓“万事俱备只欠东风”。
using System;
using System.Threading;
namespace Test
{
class Program
{
//默认信号为不发送状态
private staticManualResetEvent mre = new ManualResetEvent(false);
static void Main(string[]args)
{
EastWind wind = new EastWind(mre);
//启动东风的线程
Thread thd = new Thread(newThreadStart(wind.WindComming));
thd.Start();
mre.WaitOne();//万事俱备只欠东风,事情卡在这里了,在东风来之前,诸葛亮没有进攻
//东风到了,可以进攻了
Console.WriteLine("诸葛亮大吼:东风来了,可以进攻了,满载燃料的大船接着东风冲向曹操的战船");
Console.ReadLine();
}
}
///
/// 传说中的东风
///
class EastWind
{
ManualResetEvent _mre;
///
/// 构造函数
///
publicEastWind(ManualResetEvent mre)
{
_mre = mre;
}
///
/// 风正在吹过来
///
public void WindComming()
{
Console.WriteLine("东风正在吹过来");
for (int i = 0; i <= 5; i++)
{
Thread.Sleep(500);
Console.WriteLine("东风吹啊吹,越来越近了...");
}
Console.WriteLine("东风终于到了");
//通知诸葛亮东风已到,可以进攻了,通知阻塞的线程可以继续执行了
_mre.Set();
}
}
}
运行结果:
![ManualResetEvent线程同步 ManualResetEvent线程同步](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)