簡體   English   中英

我怎樣才能讓一個線程等到另一個線程正在等待(C#)

[英]How can I make a thread wait until another thread is wating (C#)

我有一個創建一些工作線程的使用者線程。 這些線程必須在活動狀態和等待狀態之間切換。 當所有工作線程都處於等待狀態時,這意味着當前作業已完成。 如何使使用者線程等待所有工作線程都處於等待狀態? 我希望所有工作線程上的行為都與Thread.Join()非常相似,但是,我希望線程繼續為下一個作業運行。 我無法創建新線程,因為作業處於緊密循環中,並且創建新線程的成本很高。

據我所知,沒有機制可以做您想要的。 (Thread.Join,但是由於您無法阻止,所以這不是一種選擇)

根據您提供的信息,這聽起來像是您真正在跨多個線程構建狀態機。

我將創建一個Singleton並將其用作狀態機。 線程可以向Singleton那里發出信號。

聽起來您的線程數量不確定,因此您需要將每個線程的狀態放入集合中。 我將在這里查看“ 線程安全集合”,以找到適合您希望存儲狀態信息的方式。

希望這可以幫助。

簡短的答案很抱歉(稍后可能會擴展),但您可能需要將WaitHandle.WaitAll方法與ManualResetEvent結合使用。 您將在創建每個工作線程時將ManualResetEvent對象傳遞給每個工作線程,在它們變為空閑時向它們發出信號,並將整個句柄集傳遞給WaitHandle.WaitAll方法以在觀察線程完成時將其喚醒。 如果要在等待時定期運行某種任務,或者如果任務花費太長時間,則可以執行某種操作,也可以使用此方法的超時功能。

請注意,如果您的工作線程打算在操作完成時終止(如果情況如此,還不能完全清楚),則將它們作為任務生成並使用Task.WaitAll可能更合適。

編輯:快速閱讀后,聽起來您確實想使用任務而不是嘗試重用完整的工作線程。 任務使用從線程池中分配的線程,從而消除了您擔心的線程創建開銷,因為線程將(通常)准備就緒並等待工作。 您只需生成每個任務,然后等待它們完成即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM