我想知道从信号处理程序访问共享数据是否是个好主意。我的意思是考虑具有单个进程的多进程系统和多线程系统的场景。在多进程系统中,假设我让进程处理特定信号并通过进程更新某些共享变量或内存。我可以从信号处理程序本身做到这一点吗?
但是,对于使用 pthread 的线程,我认为这是不可行的。http://maxim.int.ru/bookshelf/PthreadsProgram/htm/r_40.html. 如本文所述,他们提到它不是异步信号安全的,并建议为此使用 sigwait。我不是为什么它不是异步信号安全的。我的意思是说,我通过线程处理信号并且在信号处理程序路由中。我获取了共享内存的锁来更新它。与此同时,另一个相同类型的信号到达,另一个负责处理它的线程再次执行信号处理程序。这里的信号处理程序对于进程是相同的,但它被多次调用。第二次,它看不到锁并更新/覆盖数据。这是使用共享数据的多线程信号处理程序的问题吗?
我有点困惑,在多进程系统中,每个进程都有一个信号处理程序的副本。但是在多线程系统中,多个线程使用的信号处理程序只有一个副本,不是吗。那么当多个相同类型的信号到达并且我们有两个负责处理它的线程尝试处理它时,它们都会尝试执行同一段处理程序代码吗?这一切如何适应?