2012-02-23 64 views
3

在pthreads API中有一種方法,我可以讓一個線程指示自己或另一個線程暫停嗎?Pthreads信號般的暫停?

暫停,我的意思是停止執行,並停止獲取計劃,直到另一個線程指示它恢復。

+0

你想在任何地方或特定地點暫停嗎? – Tudor 2012-02-27 07:51:13

回答

6

pthread/POSIX Thread stack中,您可以使用pthread_kill發送信號給單獨的線程;但不幸的是,這並不包括「停止」,「繼續」或「終止」。請參閱註釋here

如果您只對暫停線程感興趣,一個狡猾的互斥體和條件變量公式是最好的前進方式。

+0

謝謝你,享受你的賞金;) – 2012-02-27 13:16:19

+0

是的大衛施瓦茨,享受那賞金;) – Marty 2012-03-16 09:01:14

6

您可以爲此使用互斥鎖和條件變量。


告訴另一個線程暫停:

  1. 鎖定互斥。

  2. 設置共享pause變量爲true。

  3. 釋放互斥鎖。


要檢查是否需要暫停:

  1. 鎖定互斥。

  2. 檢查pause變量是否設置爲true。

  3. 如果沒有,釋放互斥並繼續。

  4. 如果是這樣,條件變量塊轉到步驟2。


取消暫停一個線程:

  1. 鎖定互斥。

  2. pause變量設置爲false。

  3. 廣播條件變量。

  4. 釋放互斥鎖。

但我必須指出,這幾乎肯定不是一個明智的做法。沒有理由你應該永遠不想暫停一個線程。你的外在問題可能就像阻止某個特定類型的工作一樣。這應該通過指揮線程完成其他工作來完成,而不是阻止他們從事任何工作。