如果在调用sigwait()时没有等待集中的信号被挂起,线程将被暂停,直到一个或多个信号变为挂起状态。调用sigwait()时,必须阻止由集合定义的信号;否则,行为是未定义的。sigwait()对集合中的信号的信号动作的影响是未指定的。
在此处,“pending”和“block”之间的区别确实很模糊。如果信号已经在等待集中挂起,则说明它们已经被阻止了。因此,在调用sigwait()之前需要阻止集合中的信号,以便在调用时可以等待信号。
总的来说,当需要让响应异步信号运行的代码通知一个线程时,应该使用sigwait()来处理信号。或者,如果实现提供了信号量,则可以使用它们来跟踪sigwait(),或者从先前使用sigaction()注册的信号处理例程中使用它们。
sigwait()的理由是它允许程序员不必编写信号处理程序,而只需等待信号并进行任何必要的清理工作,如取消阻塞,并且可以避免使用非本地goto语句跳转回主程序。
在此处,“pending”和“block”之间的区别确实很模糊。如果信号已经在等待集中挂起,则说明它们已经被阻止了。因此,在调用sigwait()之前需要阻止集合中的信号,以便在调用时可以等待信号。
总的来说,当需要让响应异步信号运行的代码通知一个线程时,应该使用sigwait()来处理信号。或者,如果实现提供了信号量,则可以使用它们来跟踪sigwait(),或者从先前使用sigaction()注册的信号处理例程中使用它们。
sigwait()的理由是它允许程序员不必编写信号处理程序,而只需等待信号并进行任何必要的清理工作,如取消阻塞,并且可以避免使用非本地goto语句跳转回主程序。