[英]POSIX Threads and signal masks
有沒有辦法從另一個線程更改一個線程的信號掩碼? 我應該編寫一個不使用互斥體,信號量和條件變量,而僅使用信號的多線程C應用程序。
因此看起來像這樣:主線程將SIGUSR1發送到其進程,並且2個線程之一(不包括主線程)將響應該信號,並阻止SIGUSR1進入sigmask並進入睡眠狀態。 然后主線程再次發送SIGUSR1,另一個線程將響應,從其sigmask阻止SIGUSR1,從其他線程sigmask取消阻止SIGUSR1,因此它將再次響應SIGUSR1。
因此,基本上,每當主線程發送SIGUSR1時,其他兩個線程就會相互交換。
有人可以幫忙嗎?
您可能正在尋找從主線程調用的pthread_sigqueue(3)
,以及子線程中的sigwait(3)
或sigtimedwait(2)
)。
線程只能修改自己的信號掩碼(通過pthread_sigmask()
)。 如果要修改另一個線程的信號掩碼,則必須自己編寫代碼以要求另一個線程執行此操作。
信號被發送到此處的進程,因此kill()
或sigqueue()
是要使用的函數。 后者將避免合並多個信號,而這可能會與kill()
一起發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.