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


    并发与竞态


     

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


    • 信号量

    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. 自旋锁适用于持有时间较短的(忙等的特点)


  • 相关阅读:
    bzoj 1057: [ZJOI2007]棋盘制作
    【NOIP2012】开车旅行
    bzoj 2326: [HNOI2011]数学作业
    一本通1527欧拉回路
    一本通1530 Ant Trip
    一本通1528单词游戏
    luogu1856
    CF1045G
    10.18模拟赛
    10.16模拟赛
  • 原文地址:https://www.cnblogs.com/renhl/p/4547844.html
Copyright © 2020-2023  润新知