技术深度解析:163MusicLyrics的架构设计与多平台歌词获取实践指南
2026/6/21 0:42:28
在中断处理中,有两种重要的例程:过滤器例程(filter routine)和线程化中断处理例程(ithread routine)。
过滤器例程有一定的使用限制,它不能进行上下文切换,并且只能使用自旋互斥锁进行同步。因此,通常只在需要非抢占式中断处理程序的设备中使用。该例程可以完全处理一个中断,或者将计算密集型工作推迟到其关联的 ithread 例程(如果有的话)。过滤器例程的返回值及其含义如下表所示:
| 常量 | 描述 |
|---|---|
| FILTER_STRAY | 表示过滤器例程无法处理此中断,相当于一个错误代码。 |
| FILTER_HANDLED | 表示中断已被完全处理,相当于一个成功代码。 |
| FILTER_SCHEDULE_THREAD | 调度 ithread 例程执行,此值仅当过滤器例程有相关联的 ithread 例程时才能返回。 |
ithread 例程与过滤器例程不同,它在自己的线程上下文中执行。在 ithread 例程中,除了自愿进行上下文切换(即睡眠)或等待条件变量外,可以执行任何操作。由于过滤器例程是非抢占式的,FreeBSD 中的大多数中断处理程序实际上就是 ithread 例程。