Ben*_*ird 6 c signals event-handling race-condition
在C中处理信号时,我需要知道如何避免竞争条件.每当我的程序收到信号时,我希望它改变(全局)链表.至关重要的是,我不会错过任何信号,同样重要的是我正在修改的全局链表在处理程序执行时不会被更改.
问题是,如果我收到一个信号,并启动处理程序,但然后被另一个信号打断.这(据我所知)触发了信号处理程序的新执行,它将在相同的全局数据集上运行 - 不允许!
我不能使用锁,因为如果第一个处理程序调用被中断,它自然永远不会释放锁以让中断处理程序获取.那么,我该怎么做?任何的想法?
如果您有幸在多线程环境中工作,最好的方法之一是让全局链表由单独的线程专门控制。中断会将请求排队到该线程(例如,只需传递指针即可非常快速地执行的操作),然后线程将按程序遍历每个请求并修改链接列表。这允许无锁执行。
当然,您必须依赖操作系统的消息传递垃圾,因此这可能不是一个选择。