User Tools

Site Tools


mywiki:linux:linux_locking

Linux内核中的各种锁

RCU

RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。

Spin Lock

Table of Minimum Spin Lock Requirements

The following table lists the minimum locking requirements between various contexts. In some cases, the same context can only be running on one CPU at a time, so no locking is required for that context (eg. a particular thread can only run on one CPU at a time, but if it needs shares data with another thread, locking is required).

Remember the advice above: you can always use spin_lock_irqsave(), which is a superset of all other spinlock primitives.

IRQ Handler A IRQ Handler B Softirq A Softirq B Tasklet A Tasklet B Timer A Timer B User Context A User Context B
IRQ Handler A None
IRQ Handler B spin_lock_irqsave None
Softirq A spin_lock_irq spin_lock_irq spin_lock
Softirq B spin_lock_irq spin_lock_irq spin_lock spin_lock
Tasklet A spin_lock_irq spin_lock_irq spin_lock spin_lock None
Tasklet B spin_lock_irq spin_lock_irq spin_lock spin_lock spin_lock None
Timer A spin_lock_irq spin_lock_irq spin_lock spin_lock spin_lock spin_lock None
Timer B spin_lock_irq spin_lock_irq spin_lock spin_lock spin_lock spin_lock spin_lock None
User Context A spin_lock_irq spin_lock_irq spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh None
User Context B spin_lock_irq spin_lock_irq spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh spin_lock_bh down_interruptible None
mywiki/linux/linux_locking.txt · Last modified: by 127.0.0.1