内核同步机制
2016-04-08 10:18
211 查看
互斥锁
自旋锁:
使用形式: struct mutex mutex; mutex_init(&mutex); /*定义*/ ... mutex_lock(&mutex); /*获取互斥锁*/ ... /*临界资源*/ mutex_unlock(&mutex); /*释放互斥锁*/ mutex_destroy(&mutex);/*销毁互斥锁*/
自旋锁:
static DEFINE_SPINLOCK(remote_lock); /*定义*/ unsigned long flags; spin_lock_irqsave(&remote_lock, flags); 加锁 spin_unlock_irqrestore(&remote_lock, flags); 解锁
信号量 1)定义,初始化 struct semaphore:信号量类型 (1) 定义一个名字为name的互斥锁。实际上初始信号量初始化为1 DECLARE_MUTEX(name); (2)初始化一个信号,值初始为val struct semaphore name; sema_init(&name, val); (3) 定义一个名字为name的信号量,初始信号量初始化为1,实际上就是互斥锁 struct semaphore name; init_MUTEX(name); (4)定义一个名字为 sem 的信号量,初始化 sem 信号量为0 struct semaphore sem; init_MUTEX_LOCKED(sem): 2) 申请信号量方法: down(&name); //得不到信号量会阻塞,不可被中断唤醒。减1操作,就是获取信号量。这个函数不可中断休眠, down_interruptible(&name); //得不到信号量会阻塞,可以被中断唤醒 down_killable(&name); down_trylock(&name); //得不到信号量不会阻塞 down_timeout(&name,jiffies); //得不到信号量会阻塞jiffies 个时间节拍 3) 释放信号量方法: up(&name) 信号量加1操作。
相关文章推荐
- Linux 自检和 SystemTap
- 一张图看尽 Linux 内核运行原理
- Linux内核链表实现过程
- PHP内核探索之解释器的执行过程
- 深入理解PHP内核(二)之SAPI探究
- C++中Semaphore内核对象用法实例
- 一张图看尽Linux内核运行原理
- 深入理解PHP内核(一)
- PHP内核探索之变量
- 深入php内核之php in array
- 浅谈Linux内核创建新进程的全过程
- 修改内核 内存分配 root、文件系统和内核镜像的位置
- 移植linux-2.6.30.4到S3C2440
- 看《Linux0.11内核完全注释2.01》的方法
- 升级LINUX内核(支持8G内存)的命令
- FreeBSD系统优化部分内核参数调整中文注释
- Linux2.6X内核中文件相关结构体总结
- 内核的主要配置文件的详细说明
- redhat AS4内核配置更改再编译
- Linux启动添加内核参数简介