MST

星途 面试题库

面试题:C语言中信号处理函数可重入性的基础理解

请简述在Linux环境下,C语言信号处理函数可重入性的概念,并举出一个可能导致不可重入的函数例子,说明原因。
43.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

可重入性概念

在Linux环境下,C语言信号处理函数的可重入性指该函数能够被中断,且在被中断后再次调用时,能正常执行而不会出现数据错误或其他异常情况。也就是说,当信号处理函数在执行过程中被另一个信号中断,再次进入该信号处理函数时,其内部状态和执行结果是可预期的,不会因为多次调用导致函数内部数据混乱。这要求函数不依赖于静态或全局变量的特定状态,不调用不可重入的函数,并且自身的执行逻辑不受中断的影响。

可能导致不可重入的函数例子及原因

例如 printf 函数。原因是 printf 函数通常会使用静态数据结构来管理输出缓冲区等资源。当一个信号处理函数调用 printf 进行输出时,如果在 printf 尚未完成其内部操作(如向缓冲区写入数据、刷新缓冲区等)时,另一个信号中断了当前信号处理函数,再次调用 printf,就可能会导致缓冲区数据混乱,因为两个 printf 调用可能会同时操作同一个静态缓冲区,从而破坏数据的一致性,所以 printf 是不可重入函数。