Linux 驱动使用 kfifo 时,怎样保持并发安全和消息边界?
kfifo 适合有界 FIFO;单生产者单消费者在规定条件下可无额外锁,多生产者或多消费者需要同步。字节流不天然保存消息边界,可使用 record 形式或自定义长度头,并在取出前验证完整记录。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
kfifo 适合有界 FIFO;单生产者单消费者在规定条件下可无额外锁,多生产者或多消费者需要同步。字节流不天然保存消息边界,可使用 record 形式或自定义长度头,并在取出前验证完整记录。
信号可能在任意指令点打断当前线程,许多库函数持有内部锁或修改全局状态,重入会死锁或破坏数据。Handler 只能调用异步信号安全函数,常见做法是设置 sig_atomic_t 标志或写 Self-Pipe/Eventfd 通知主循环。
Runtime PM 在系统运行时按设备空闲状态独立关电/关钟,系统 Suspend 则协调全机进入睡眠。驱动需维护 usage count、autosuspend 和依赖关系,并在回调中保存/恢复必要上下文,阻止 I/O 与断电竞争。
TCP Keepalive 在连接长时间空闲后探测对端网络栈是否可达,默认周期往往很长;应用心跳可按业务 SLA 验证服务线程、会话和端到端响应,还能携带序列与状态。两者可组合但不能替代请求超时。
三次握手让双方同步初始序号并确认双向可达;全双工连接的两个方向独立关闭,因此正常释放常见四个报文;主动关闭方进入 TIME_WAIT,等待旧报文消失并能重发最后 ACK。
socket 创建端点,bind 绑定本地地址端口,listen 让它成为监听 Socket 并设置排队提示,accept 从已完成连接队列取出一个新的已连接 Socket;监听 Socket 继续负责接收新连接。