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信号,它不会自动设置关;
}