ManualResetEvent的理解和使用[通俗易懂]

ManualResetEvent的理解和使用[通俗易懂]class Program static void Main string args 注意 ManualResetE 可以对所有进行等待的线程进行统一控制 true 初始状态为发出信号 false 初始状态为未发出信号 ManualResetE mre new ManualResetE false

class Program
{
static void Main(string[] args)
{
//注意:ManualResetEvent可以对所有进行等待的线程进行统一控制

//true-初始状态为发出信号;false-初始状态为未发出信号
ManualResetEvent mre = new ManualResetEvent(false);
//线程池开启10个线程
for (int i = 0; i < 10; i++)
{
int k = i;

ThreadPool.QueueUserWorkItem(t =>
{
Console.WriteLine($"这是第{k+1}个线程,线程ID为{Thread.CurrentThread.ManagedThreadId}");
//等待信号,没有信号的话不会执行后面的语句,因为初始状态是false,所以后面的语句暂时不会执行
mre.WaitOne();
Console.WriteLine($"第{k+1}个线程获得信号,线程ID为{Thread.CurrentThread.ManagedThreadId}");
});
}
Thread.Sleep(5000);
Console.WriteLine("\r\n 5秒后发出信号... \r\n");
//Set()方法:释放信号,所有等待信号的线程都将获得信号,开始执行WaitOne()后面的语句
mre.Set();
Console.ReadKey();
}
}

执行结果如图

可见,没有信号时,WaitOne()后面的语句都不执行(被阻塞),当Set()释放信号后,所有阻塞的线程都开始继续执行。

编程小号
上一篇 2025-02-25 10:01
下一篇 2025-03-20 14:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/139727.html