您的位置:首页 > 其它

国嵌内核驱动进阶班-6-4 竞争与互斥(2)

2015-06-02 22:42 295 查看
并发与竞态

处理并发的机制(信号量和自旋锁)

信号量

1.定义信号量

#include <asm/semaphore.h>

struct semaphore sem;

2.初始化信号量

void sema_init(struct semaphore *sem, int val)

val 为非正数 表明有任务等待信号量

3.锁

int down_interruptible(struct semaphore *sem)

TASK_INTERUPTIBLE

down_killable(struct semaphore *sem)

TASK_KILLABLE

※ down()已经不建议使用

4. 释放

void up(struct semaphore *sem)

互斥锁(特殊的信号量)

1. 初始化互斥锁

void init_MUTEX(struct semaphore *sem) //初始化为1

DECLARE_MUTEX(struct semaphore *sem)//定义并初始化为1

void init_MUTEX_LOCKED(struct semaphore *sem) //初始化为0

DECLARE_MUTEX_LOCKED(struct semaphore *sem)//定义并初始化为0

自旋锁

不会引起调用的睡眠,特点为忙等。

spin_lock_init(x)

  spin_lock(lock)

  spin_trylock(lock)

  spin_unlock(lock)

信号量与自旋锁区别

  1. 信号量可以有多个持有者,自旋锁只能有一个持有者。

   2. 自旋锁适用于持有时间较短的(忙等的特点)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: