2013-07-22 110 views
2

有一個控制線程和一組工作線程正在處理中。工作模式如下:
(1)所有的工作線程和控制線程都在運行; (2)當控制線程檢查某些條件變化時,它暫停所有工作線程; (3)在檢查所有工作線程被掛起後,控制線程修改存儲器中的一些內容; (4)修改後,控制線程恢復所有工作線程。
我的問題是:
(1)在第2步和第4步中,如何控制線程掛起並恢復所有工作線程?我考慮使用pthread_cond_wait和pthread_cond_signal,但它似乎只對控制線程和工作線程正常。 (2)在步驟3中,如何控制線程檢查所有工作線程被暫停?我考慮使用櫃檯,有沒有什麼好方法?控制線程暫停和恢復一組工作線程

+0

我可以看到一個點的列表,但沒有真正的問題。你想要什麼,你已經嘗試過什麼?但我的建議是查詢消息隊列或/和pthread_cond_signal – hetepeperfan

+0

@hetepeperfan:謝謝你的回覆!我想要的是如何實現:控制線程暫停和恢復一組工作線程。您的建議:查找消息隊列或/和pthread_cond_signal。你能詳細解釋一下嗎? –

回答

1
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. 

這是共享內存嗎?如果它是一個共享內存,你可以有一個互斥鎖來允許一個線程一次訪問臨界區。

如果你有一個代碼可以很容易地理解你的問題。

+0

感謝您的回覆,但我認爲這不是我想要的答案。 –

+0

@NanXiao:編輯答案 –

1

你真的需要暫停線程嗎?如果我理解你是正確的,你正試圖解決Readers writers problem。在這種情況下,我建議pthread_rwlock_t爲您的控制線程提供對共享內存的獨佔訪問。

+0

沒有懸掛線程的方法嗎?謝謝! –