static AutoResetEvent are = new AutoResetEvent(true);//初始化为开
static void Main(string[] args)
{
//如果这里加上这句 are.Reset(); 则会把初始化的开,改为关
for (int i = 0; i < 10; i++)
{
new Thread(() =>
{
are.WaitOne();//发现为开,继续执行并设置为关
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now.ToString("mm:ss"));
are.Set();//又重新设置为开
}).Start();
}
}
static AutoResetEvent are = new AutoResetEvent(false);//初始化为关
static void Main(string[] args)
{
are.Set();//这里必须先设置为开,下面are.WaitOne()才能继续执行
for (int i = 0; i < 10; i++)
{
new Thread(() =>
{
are.WaitOne();//发现为开,继续执行并设置为 关,如果 are 是 ManualResetEvent 的实例,则 不会 自动设置为 关
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now.ToString("mm:ss"));
are.Set();//又重新设置为开
}).Start();
}
}
static AutoResetEvent are = new AutoResetEvent(false);
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
new Thread(() =>
{
are.WaitOne();
Thread.Sleep(1000);
Console.WriteLine(DateTime.Now.ToString("mm:ss"));
}).Start();
}
are.Set();// 只能执行一个线程输出,其它阻塞;如果 are 是 ManualResetEvent 的实例,则会全部输出,因为 WaitOne 它只等一个Set信号,它不会自动设置关;
}