2012-10-28 76 views
1

有沒有辦法從另一個線程更改線程的信號掩碼? 我應該編寫一個多線程的C應用程序,不使用互斥量,信號量和條件變量,只有信號。POSIX線程和信號掩碼

所以它看起來像這樣的事情: 主線程發送SIGUSR1到它的過程和和2個線程(不包括主線程)之一,將在信號和塊SIGUSR1從sigmask和睡眠響應。然後主線程再次發送SIGUSR1,另一個線程將響應,從它的sigmask中阻塞SIGUSR1,從其他線程的sigmask中解除SIGUSR1,所以它會再次響應SIGUSR1。

所以基本上每當主線程發送SIGUSR1時,兩個其他線程在彼此之間交換。

有人可以幫忙嗎?

回答

1

您可能正在尋找pthread_sigqueue(3)從主線程調用,sigwait(3)sigtimedwait(2)在子線程(或多個)。

+1

pthread_sigqueue將是一個完美的選擇,但它只適用於Linux環境,一般不適用於posix。它不會在Mac OS上編譯x – Max

+0

使用'pthread_kill'。無論如何,除了實時信號外,sigqueue並不比「kill」更好。 –

0

線程只能修改自己的信號掩碼(通過pthread_sigmask())。如果你想修改另一個線程的信號掩碼,你將不得不自己編寫代碼來讓其他線程去做。

信號正在發送到此處的過程,所以kill()sigqueue()是要使用的函數。後者將避免將多個信號合併在一起,這可能發生在kill()