我很好奇,如果我能夠做的unistd c函數alarm(int signal)
Alarm()可以像這樣在多線程中使用嗎?
有我的主要....併爲每個線程帽子創建initializate與功能的SIGALRM,應關閉以下我線程在激活的情況下。這可能嗎?或者1 SIGALRM/main只是合法的?
我很好奇,如果我能夠做的unistd c函數alarm(int signal)
Alarm()可以像這樣在多線程中使用嗎?
有我的主要....併爲每個線程帽子創建initializate與功能的SIGALRM,應關閉以下我線程在激活的情況下。這可能嗎?或者1 SIGALRM/main只是合法的?
進程中的每個線程有一個獨立的信號掩模,其 表示一套線程當前阻塞信號。線程可以使用pthread_sigmask(3)來操作其信號掩碼。在 傳統的單線程應用程序中,可以使用sigprocmask(2)來操縱信號掩碼。
來自人7信號。
問題是,每個進程的警報工作,而不是每個線程,所以如果線程的sigmask是相同的,你不能真正知道哪一個會接收信號。
好的,首先,alarm()
實際上是一個無符號的 int值,它是過期前的秒數。因此,您的示例int signal
不是alarm()
的正確實施,僅供參考。
至於這個雲:
for each thread that is created to initialization a SIGALRM
所產生的所以每個線程的過程沒有這樣做,所以你必須抓住報警,並有一些內部戰略需要知道的SIGALRM
其中你提出它的線程並相應地處理它。一旦你有你的處理器,你可以一遍又一遍地報警,但請記住:
報警請求沒有堆積;
所以你必須一次做這個。這仍然是可能的,但並不像你期望的那樣完全向前邁進。
對於我說的是什麼非常粗略的例子:
alarm(10)
alarm(0)
到基爾加丹被喚醒l鬧鐘,撥打電話alarm(3)
,然後注意,一旦發生故障,它需要呼叫alarm(7)
完成線程1的睡眠時間
你在說哪個'alert()'? [這個?](http://linux.die。net/man/3/alert)我不知道[unistd.h]中的「alert」(http://pubs.opengroup.org/onlinepubs/7908799/xsh/unistd.h.html) – Mike 2013-03-18 16:45:07
也許[ 「this one」](http://pubs.opengroup.org/onlinepubs/9699919799/functions/alarm.html) – Mat 2013-03-18 16:46:34
請參閱:http://stackoverflow.com/questions/7296923/different-signal-handler-for-線程和進程是可能的 - 也許它不能回答你的整個問題,但它有一些有趣的信息。 – Mat 2013-03-18 16:53:40