2012-10-08 31 views

回答

0

按照docsalarm是「流程級」,只有最後一次通話是活動......它使用的信號模型,併發送一個異步SIGALARAM的過程......被叫信號處理程序是否是線程安全取決於你的執行...

3

在一個線程中調用alarm()不會重置待處理的信號,所以你可能不想把它稱爲的一個線程。如果底層功能是pthreads,則只需在父代中調用它,而不管您使用何種語言。

你可能會更好做與線程共享需要重新發送數據,或者捅所有(或部分)正在運行的線程在父的信號服務重新發送結構的規定。

我想不出一個實現,其中稱這是一個線程內將是一個好主意,所以沒有 - 我不會使用這種方式。

+0

我的思路是專門負責發送數據的線程,以及基於史蒂文斯的UNIX網絡編程第1卷第22章的轉發算法。根據本書,它採用了alarm()函數。 – lojunren

+0

但是我知道alarm()函數沒有深刻的理解。作爲一個計時器,它可能是不正確的。你可以給我一些關於計時器的提示,它可以解開它。 – lojunren

+0

@lojunren它採用'alarm()'_內置一個線程來專門捅別人重傳? – 2012-10-08 06:27:23

2

報警()函數不是線程安全的。

因爲它是過程級別。一旦定時器觸發,您無法控制哪個線程應該接收信號。所以在信號到達時,另一個線程可能正在運行。有時它可能會導致您使用SIG_SEGV進行編程時崩潰。

相關問題