C# AutoResetEvent 线程间通信

一、基础

功能:通过信号机制控制线程的执行顺序,常用于线程之前的通信

案例:生产者消费者,winform 主线程和工作线程

二、核心

1、作用

通知等待的线程某个事件已发生(资源就绪、操作完成)

2、信号状态

有信号:WaitOne() 不会阻塞

无信号:WatiOne() 会阻塞,直到信号触发

3、发生信号

Set()

三、基本用法

1、声明

AutoResetEvent autoResetEvent = new AutoResetEvent(false); // 初始无信号

注意:false 无信号 或 未触发;true 有信号 或 已触发(线程一开始无需等待信号)

2、方法

a、WaitOne():阻塞当前线程,直到事件变成有信号。可以指定超出的时间

autoResetEvent.WaitOne();

b、Set():将事件设置为有信号状态

当调用Set()时, 若有线程在等待,则释放线程,并自动设置为无信号状态

当调用Set()时, 若没有线程在等待,则保持有信号状态,直到后续WaitOne() 调用自动消费信号并重置、

autoResetEvent.Set();

c、ReSet():将事件设置为无信号状态

autoResetEvent.Reset();

作用:

强制设置事件为无信号状态,无论当前是有有线程在等待

确保下一轮的WaitOne() 必须等待对方的信号,避免因残留事件导致的逻辑错误

参考:

https://blog.csdn.net/qq_39847278/article/details/145542525

 

https://blog.csdn.net/songhuangong123/article/details/131591253?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-131591253-blog-145542525.235^v43^pc_blog_bottom_relevance_base1&spm=1001.2101.3001.4242.1&utm_relevant_index=2

替代方案
ManualResetEventSlim:轻量级版本,性能更优。
SemaphoreSlim:控制并发访问数量。
TaskCompletionSource:基于任务的异步模式(TAP)

posted @ 2025-06-16 22:34  市丸银  阅读(41)  评论(0)    收藏  举报