本文共 845 字,大约阅读时间需要 2 分钟。
并发分为真并发和伪并发真并发 1. 多cpu(SMP)伪并发 2. 进程调度(进程与进程) 3. 中断与进程
归根接地就是这三种原因中断调度SMP但是1. 解决 中断 矛盾问题引入了软中断,也就引入了 软中断 产生的竞态2. 在 __irq_svc 返回时调度, 也就引入了内核抢占的 竞态.也就是现在有5个原因.中断调度SMP软中断 // 也就是说 软中断基于中断,如果中断被关闭,软中断产生的并发也就不需要考虑了内核抢占
开关内核抢占
不可关 用自旋锁解决 // 自旋锁 函数中关了抢占 // 自旋锁内不能休眠 (sleep及调度)
开关中断
不可关互斥锁 //可睡眠
tasklet 中断上下文//但好像是调度出来的,为什么是中断上下文呢? 待验证.软中断 中断上下文工作队列 (线程) 进程上下文
preempt_disable preempt_enable
spinlock_t spinlock;spin_lock_init(&spinlock);spin_lock(&spinlock);spin_unlock(&spinlock);中断中用spinlock_t spinlock;spin_lock_irqsavespin_unlock_irqrestore
local_irq_disablelocal_irq_enable
struct mutex mutex;mutex_init(&mutex); /*定义*/...mutex_lock(&mutex); /*获取互斥锁*/... /*临界资源*/mutex_unlock(&mutex); /*释放互斥锁*/
分为两种,一种是中断,一种是进程在上面都已经提到了.
转载地址:http://noigi.baihongyu.com/