zoukankan      html  css  js  c++  java
  • 国嵌内核驱动进阶班-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. 自旋锁适用于持有时间较短的(忙等的特点)


  • 相关阅读:
    HUE配置HBase
    HUE配置HIVE
    HUE配置hadoop
    HUE的安装
    CM (Cloudera Manager) 的安装,便于CDH的离线部署
    MapReduce -- 最短路径
    Mapreduce -- PageRank
    CentOS 建立本地yum源服务器
    js移动设备手机跳转地址代码
    离线存储
  • 原文地址:https://www.cnblogs.com/renhl/p/4547844.html
Copyright © 2011-2022 走看看