个人买卖网站如何做,自助网站建设费用,wordpress图片库,帝舵手表网站作用#xff1a; 保护一段临界区的操作时独占的#xff0c;不能由其他cpu或者线程同时访问破坏数据结构多核系统SMP#xff1a; 主要考虑一个cpu进入临界区之后#xff0c;其他CPU不能再去进入这个临界代码区单核系统#xff1a; 不能被其他进程抢占单核系统自旋锁实现 保护一段临界区的操作时独占的不能由其他cpu或者线程同时访问破坏数据结构多核系统SMP 主要考虑一个cpu进入临界区之后其他CPU不能再去进入这个临界代码区单核系统 不能被其他进程抢占单核系统自旋锁实现 两种情况打断抢占、中断 preempt_disable()关闭抢占 preempt_enable()打开抢占普通自旋锁接口 spin_lock、spin_unlock主要就是关闭和打开抢占 风险是关闭抢占只是组织了其他进程对CPU的抢占但不能阻止中断程序对CPU的抢占所以- 有更安全接口 spin_lock_irqsave、spin_unlock_irqrestore保存指令状态吗关闭中断关闭抢占 自旋锁保护的临界区代码和其调用的代码不允许睡眠多处理器普通自旋锁 typedef struct { unsigned int slock; //自旋锁初始化是设为1表示自旋锁可用 } raw_spinlock_t; API spin_lock、__raw_spin_lock、raw_spin_lock_irqsave总结 单处理器 关闭内核抢占——》运行临界区代码——》开启内核抢占 更加安全的流程 保存IF寄存器——》关闭当前CPU中断——》关闭内核抢占——》运行临界区代码——》开启抢占、cpu中断、恢复IF寄存器 SMP多处理器 关闭内核抢占——》忙等待获取自旋锁——》运行临界区代码——》释放自旋锁——》开启内核抢占 更加安全的流程 保存IF寄存器——》关闭当前CPU中断——》关闭内核抢占——》忙等待获取自旋锁——》运行临界区代码——》释放自旋锁、开启抢占、开启中断、恢复IF寄存器