有一個控制線程和一組工作線程正在處理中。工作模式如下:
(1)所有的工作線程和控制線程都在運行; (2)當控制線程檢查某些條件變化時,它暫停所有工作線程; (3)在檢查所有工作線程被掛起後,控制線程修改存儲器中的一些內容; (4)修改後,控制線程恢復所有工作線程。
我的問題是:
(1)在第2步和第4步中,如何控制線程掛起並恢復所有工作線程?我考慮使用pthread_cond_wait和pthread_cond_signal,但它似乎只對控制線程和工作線程正常。 (2)在步驟3中,如何控制線程檢查所有工作線程被暫停?我考慮使用櫃檯,有沒有什麼好方法?控制線程暫停和恢復一組工作線程
回答
In step 2 and step 4, how can control thread suspend and resume all worker threads? I consider using pthread_cond_wait and pthread_cond_signal, but it seems only OK for a control thread and a worker thread.
可以優先分配在並行線程的線程,您可以更高的優先級,以控制線程分配和調度控制線程先工作,使其他線程等待。
After checking all worker threads are suspended, the control thread modifies some contents in memory.
這是共享內存嗎?如果它是一個共享內存,你可以有一個互斥鎖來允許一個線程一次訪問臨界區。
如果你有一個代碼可以很容易地理解你的問題。
感謝您的回覆,但我認爲這不是我想要的答案。 –
@NanXiao:編輯答案 –
你真的需要暫停線程嗎?如果我理解你是正確的,你正試圖解決Readers writers problem。在這種情況下,我建議pthread_rwlock_t爲您的控制線程提供對共享內存的獨佔訪問。
沒有懸掛線程的方法嗎?謝謝! –
- 1. 暫停和恢復線程
- 2. 工作線程暫停/恢復實施
- 3. 暫停/恢復線程?
- 4. 暫停和恢復一個線程(後臺工作者)
- 5. 如何暫停和恢復線程
- 6. 安全地暫停和恢復線程
- 7. 恢復和暫停ArrayList中的線程
- 8. 如何暫停和恢復surfaceView線程
- 9. 如何暫停和恢復線程?
- 10. 在Android中暫停和恢復線程
- 11. VB.Net線程暫停和恢復
- 12. 暫停/恢復另一個線程
- 13. 線程暫停/停止活動恢復
- 14. 線程同步和線程暫停\恢復
- 15. Java ExecutorService暫停/恢復特定線程
- 16. 線程暫停/恢復問題
- 17. Perl線程不會暫停/恢復
- 18. 如何暫停/恢復線程
- 19. 線程暫停但不恢復
- 20. 暫停在工作線程
- 21. 暫停和恢復一個C++線程在另一個
- 22. 暫停和恢復線程繪製到SurfaceView
- 23. 從cpp的父線程中暫停並恢復線程
- 24. 暫停和恢復從另一個線程在C中的線程#
- 25. 如何使用線程池,暫停,播放,恢復和停止所有線程?
- 26. 作業對象 - 暫停/恢復進程的線程
- 27. .net 4.0 c#:暫停/恢復線程池中的並行運行線程暫時?
- 28. 暫停和停止線程
- 29. 線程暫停
- 30. 如何暫停工作流程並恢復工作流程?
我可以看到一個點的列表,但沒有真正的問題。你想要什麼,你已經嘗試過什麼?但我的建議是查詢消息隊列或/和pthread_cond_signal – hetepeperfan
@hetepeperfan:謝謝你的回覆!我想要的是如何實現:控制線程暫停和恢復一組工作線程。您的建議:查找消息隊列或/和pthread_cond_signal。你能詳細解釋一下嗎? –