当写访问受 seqlock 保护的共享资源时,写入者必须在进入临界区之前获得排他锁。因此,与自旋锁一样,使用 seqlock 进行写访问具有常见的变体(如 *_irqsave 和 *_bh)是有意义的。但是 LDD3(第 128 页)说:
如果您的 seqlock 可以从中断处理程序中访问,您应该使用 IRQ 安全版本来代替:
unsigned int read_seqbegin_irqsave(seqlock_t *lock, unsigned long flags); int read_seqretry_irqrestore(seqlock_t *lock, unsigned int seq, unsigned long flags);
据我了解,由于它是为读者设计的,可以自由访问共享资源(仅在最后检查一致性并在需要时重试),因此读取访问被调度程序或硬件中断中断是完全可以的。我错过了什么吗?谢谢。