练习:
根据我的理解,人们可能希望允许代码的关键部分不间断地运行。
可以通过阻止标准信号等中断来实现。
冲突:
我如何能够处理从关键部分代码中发生的故障/标准信号。 我能想到的一个典型例子是分配内存失败。 甚至更好,由于无效地址而无法释放内存。 来自" alloc / free"的内存操作我理解的部分属于临界部分。
我尝试了什么:
我确实试图四处搜寻,并研究信号和重入的主题, 然而,我偶然发现了这场冲突。
一些输入会很棒,提前谢谢。
答案 0 :(得分:2)
POSIX信号,返回代码和异常是不同的东西。
要在不中断的情况下运行的关键代码段
准确地说,关键部分是由互斥锁保护的代码块。也就是说,一次只能有一个线程进入临界区。
我如何能够处理从关键部分代码中发生的故障/标准信号。我能想到的一个典型例子是分配内存失败。
失败时malloc
返回NULL
,此处不涉及任何信号。
甚至更好,由于地址无效而无法释放内存。
代码无法处理此类错误。这是一个编程错误,必须尽早发现并修复。发现此类错误的最佳工具之一是Valgrind。
因为当您收到SIGSEGV
,SIGBUS
,SIGILL
或SIGFPE
信号时,您的进程地址空间的状态是不确定的,代码可能已损坏所有进程内存在生成SIGSEGV
时,所以在收到此信号后没有好方法可以恢复程序的正确状态。