Pep*_*dou 5 c linux multithreading signals pthreads
我在Linux上运行用C编写的多线程应用程序.
为了停止执行,我发送SIGINT和从信号处理程序调用一些清理例程,最后调用exit(0).
处理程序执行清理例程时,其他线程是否仍在运行或可能运行(上下文切换)?
处理信号不会导致在执行信号处理程序期间暂停其他线程.此外,exit从信号处理程序调用清理所需的大多数函数(包括偶数!)通常是不安全的,除非你能确保它不会中断async-signal-unsafe函数.
你应该做的只是存储SIGINT以某种异步信号安全的方式接收的事实,并让程序在信号处理程序之外作为其正常执行流程的一部分作用于该条件.然后,您可以正确地与其他线程同步(使用互斥锁,条件变量等),以实现正确,安全的关闭.理想的方法不是安装信号处理程序,而是阻塞所有信号,并sigwaitinfo在循环中调用专用的信号处理线程来接受信号.
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |