内核同步机制

来源:互联网 发布:淘宝篮球鞋进货渠道 编辑:程序博客网 时间:2024/05/21 19:23

互斥锁

使用形式: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操作。
0 0
原创粉丝点击