【发布时间】:2019-08-09 14:20:18
【问题描述】:
线程 A 在循环中执行一个阻塞调用,直到线程 B 发出信号继续执行其余部分。
我尝试了信号处理程序的经典方法,它会更改条件变量,因此我可以在下一次调用开始之前测试条件。
现在问题出现在这种情况下,当信号在条件检查之后到达,但在阻塞调用之前。
问题的简短伪代码示例:
while(!isInterrupted){
raise(SIGINT)
block()
}
假设我无法访问或更改阻塞代码的实现,并且阻塞调用不提供内部超时功能,信号处理程序可以将其设置为最小值,那么 C 和 C++ 的正确方法是什么?处理这个?
信号被用作阻塞调用,只能通过接收 SIGINT 来唤醒。
提前感谢您的帮助。
【问题讨论】:
-
你需要一个原子的“解锁并等待”函数。
-
您可能需要考虑长跳出信号处理程序。这可能是一个好主意,也可能不是一个好主意,具体取决于阻塞调用的性质。
-
@user58697 谢谢,没想到。你说的对。在某些情况下,包括这个,这是最不臃肿的方式。祝你有美好的一天!