并发分为真并发和伪并发
真并发
1. 多cpu(SMP)
伪并发
2. 进程调度(进程与进程)
3. 中断与进程
归根接地就是这三种原因
中断
调度
SMP
但是
1. 解决 中断 矛盾问题引入了软中断,也就引入了 软中断 产生的竞态
2. 在 __irq_svc 返回时调度, 也就引入了内核抢占的 竞态.
也就是现在有5个原因.
中断
调度
SMP
软中断
内核抢占
各种问题及解决方案
开关内核抢占
不可关
用自旋锁解决
开关中断
不可关
互斥锁
tasklet
中断上下文
软中断
中断上下文
工作队列 (线程)
进程上下文
并发及方案
preempt_disable
preempt_enable
spinlock_t spinlock;
spin_lock_init(&spinlock);
spin_lock(&spinlock);
spin_unlock(&spinlock);
中断中用
spinlock_t spinlock;
spin_lock_irqsave
spin_unlock_irqrestore
local_irq_disable
local_irq_enable
struct mutex mutex;
mutex_init(&mutex);
...
mutex_lock(&mutex);
...
mutex_unlock(&mutex);
分为两种,一种是中断,一种是进程
在上面都已经提到了.