[英]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.