Linux Kernel 学习笔记7:同步与互斥之自旋锁
2017-04-28 23:24
239 查看
(本章基于:Linux-4.4.0-37)
自旋锁是一个互斥设备,具有“锁定”和“解锁”两个状态。在进入临界区代码之前锁定,出临界区后解锁。当一个锁被锁定,其他进程尝试获取该锁时则进入“忙等”状态,即反复检查该锁的状态直到这个锁可用为止。因此在使用自旋锁时,代码临界区应该尽量“短小”,避免可能引起睡眠的操作,如kmalloc()。
相关头文件:linux/spinlock.h
自旋锁变量类型:spinlock_t
定义一个自旋锁变量,并初始化为解锁状态
DEFINE_SPINLOCK(x)
初始化一个自旋锁
spin_lock_init(_lock)
加锁操作
static inline void spin_lock(spinlock_t *lock);
解锁操作
static inline void spin_unlock(spinlock_t *lock);
例:
spin.c
自旋锁是一个互斥设备,具有“锁定”和“解锁”两个状态。在进入临界区代码之前锁定,出临界区后解锁。当一个锁被锁定,其他进程尝试获取该锁时则进入“忙等”状态,即反复检查该锁的状态直到这个锁可用为止。因此在使用自旋锁时,代码临界区应该尽量“短小”,避免可能引起睡眠的操作,如kmalloc()。
相关头文件:linux/spinlock.h
自旋锁变量类型:spinlock_t
定义一个自旋锁变量,并初始化为解锁状态
DEFINE_SPINLOCK(x)
初始化一个自旋锁
spin_lock_init(_lock)
加锁操作
static inline void spin_lock(spinlock_t *lock);
解锁操作
static inline void spin_unlock(spinlock_t *lock);
例:
spin.c
#include <linux/spinlock.h> static int shareData = 0; //共享数据 DEFINE_SPINLOCK(my_lock); //声明my_lock spin_lock_init(&my_lock); //初始化my_lock spin_lock(&my_lock);//加锁 shareData = 10; spin_unlock(&my_lock); //解锁
相关文章推荐
- Linux Kernel 学习笔记8:同步与互斥之信号量
- 学习笔记 --- LINUX的同步互斥机制 --- 自旋锁与信号量的区别
- 操作系统学习笔记(9) 互斥和同步的信号量算法
- 操作系统学习笔记(10) 互斥和同步的经典问题
- linux 系统编程-学习笔记9--线程的同步互斥锁、读写锁/select/poll
- 操作系统学习笔记(13) 互斥与同步的经典问题 -哲学家进餐问题
- 操作系统学习笔记(8) 互斥和同步的实现算法
- [原创]W2k Driving 学习笔记(一)内核线程及同步
- 孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
- Linux Kernel学习笔记
- Java6学习笔记57——多线程编程——线程的互斥(version 0.2)
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--同步篇
- CUDA学习笔记之同步操作指令
- “单比特信号同步” 学习笔记
- OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作
- Linux Kernel学习笔记
- .net多线程学习笔记 3 线程间同步
- 孙鑫VC学习笔记:第十六讲 利用关键代码段实现线程间的同步
- Linux kernel 学习笔记(1) --分段分页保护机制
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--互斥篇