a.定义自旋锁 spinlock_t lock;
b.初始化自旋锁 spin_lock_init(spinlock_t *);
c.获得自旋锁 spin_lock(spinlock_t *); //成功获得自旋锁立即返回,否则自旋在那里直到该自旋锁的保持者释放
spin_trylock(spinlock_t *); //成功获得自旋锁立即返回真,否则返回假,而不是像上一个那样"在原地打转”
d.释放自旋锁 spin_unlock(spinlock_t *);
#include <linux/spinlock.h>
定义spinlock_t类型的变量lock
spin_lock_init(&lock)后才能正常使用spinlock
spin_lock(&lock);
临界区
spin_unlock(&lock);
适用场合:
1 . 异常上下文之间或异常上下文与任务上下文之间共享资源时
2 . 任务上下文之间且临界区执行时间很短时
3 . 互斥问题
openonce_spinlock.c
#include <linux/module.h> #include <linux/kernel.h> #inclu