C#ManualResetEvent和AutoResetEvent使用筆記

1.ManualResetEvent 調用一次Set()後將允許恢復所有被阻塞線程。需手動在調用WaitOne()之後調用Reset()重置信號量狀態爲非終止,然後再次調用WaitOne()的時候才能繼續阻塞線程,反之則不阻塞

2.AutoResetEvent,調用一次Set()只能繼續被阻塞的一個線程,多次調用Set()纔行,但不需手動調用Reset();再次調用WaitOne()的時候又能阻塞線程,也是和前者的區別

3.兩者單個實例均可阻塞一個或多個線程,在多個線程中調用 主線程 創建的 兩者單個實例.WaitOne(),前提是兩者實例必須是非終止狀態

4.兩者實例化構造參數解釋

public AutoResetEvent(bool initialState);

true:設置終止狀態。相當於調用了Set(),即首次不會被WaitOne()阻塞,下次執行WaitOne()纔會被阻塞

false:設置非終止狀態。遇到WaitOne()立即阻塞所在的一個或多個線程

  1. 兩者都只會阻塞WaitOne()所在的線程,WaitOne()可被多個線程調用

https://blog.csdn.net/lvjiyang/article/details/112780493?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2.pc_relevant_bbs_down_cate&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-2.pc_relevant_bbs_down_cate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章