閱讀檔案后,我仍然不太了解信號阻塞。如果您有一個屏蔽給定信號的掩碼,您是否需要先解除對該信號的阻塞以允許程式攔截它,或者信號阻塞是否以不同的方式表現?
如果您使用 sigsuspend,您的程式是否會暫停,直到您作為引數傳遞的掩碼中的給定信號到達?
您在使用 sigsuspend 時等待的信號應該被解除阻塞還是沒有必要?
順便說一句,我正在使用 C 和 pthread 庫來撰寫我的程式
uj5u.com熱心網友回復:
如果您有一個屏蔽給定信號的掩碼,您是否需要先解除對該信號的阻塞以允許程式攔截它,或者信號阻塞是否以不同的方式表現?
信號永遠不會傳遞給任何阻塞它的執行緒。如果在該行程的所有執行緒都阻塞該行程的情況下為該行程引發了一個信號,則該信號將保持掛起狀態,直到至少有一個執行緒解除阻塞,或者該行程終止。
如果您使用 sigsuspend,您的程式是否會暫停,直到您作為引數傳遞的掩碼中的給定信號到達?
不。您傳遞給的信號掩碼與您傳遞給的信號掩碼sigsuspend具有相同的含義(例如)sigprocmask():它指定了應阻止的一組完整信號。此掩碼不得包含您希望執行緒能夠接收的任何信號。通常,傳遞sigsuspend()前一個sigprocmask()呼叫之前有效的掩碼是合適的,如果您要求,后一個函式將提供給您。
您在使用 sigsuspend 時等待的信號是否應該被暢通或沒有必要
在任何時候,您都應該確保您希望執行緒能夠接收的任何信號都未被阻塞,相反,執行緒不能接收的任何信號都被阻塞。這就是為什么sigsuspend()為您提供一種方法來指定在通話期間有效的不同信號掩碼的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452547.html
上一篇:Shell腳本語法錯誤if[[$Char==[AZ]-o$Char==[az]]]
下一篇:嘗試按字符復制字串字符時出現問題
