zoukankan      html  css  js  c++  java
  • linux内核态和用户态的信号量

    在Linux的内核态和用户态都有信号量,使用也不同,简单记录一下。

    1> 内核信号量,由内核控制路径使用。 内核信号量是struct semaphore类型的对象,它在<asm/semaphore.h>中定义

    struct semaphore {

         atomic_t count;

        int sleepers;

        wait_queue_head_t wait; } 内核信号量的相关函数 初始化:

    void sema_init (struct semaphore *sem, int val); 申请内核信号量所保护的资源:

    void down(struct semaphore * sem); // 可引起睡眠 释放内核信号量所保护的资源:

    void up(struct semaphore * sem);

    2> 用户态信号量分为两种,一种为POSIX,另一种为 SYSTEM V

    POSIX信号量的引用头文件是<semaphore.h>,而SYSTEM V信号量的引用头文件是 <sys/sem.h>

    从使用的角度,System V信号量是复杂的,而Posix信号量是简单。比如,POSIX信号量的创建和初始化或PV操作就很非常方便。

    这里只是简单列举POSIX信号量

    int sem_init(sem_t *sem, int pshared, unsigned int value);  

    int sem_wait(sem_t *sem); // 这是一个阻塞的函数,信号量减1 

     int sem_post(sem_t *sem); //把指定的信号量sem的值加1; 呼醒正在等待该信号量的任意线程。

    以上内容均摘录博客:

    inux 内核信号量用户态信号量 详解 https://blog.csdn.net/weed_hz/article/details/8965733?utm_source=blogxgwz1

    相关文章:

    Linux用户态的信号量 https://blog.csdn.net/zhang_shuai_2011/article/details/7653750

    linux内核态和用户态之间相互通信 https://www.cnblogs.com/charlesblc/p/6261918.html

  • 相关阅读:
    Cannot assign requested address问题总结
    Trying to connect an http1.x server
    从 0 到 1 搭建技术中台之推送平台实践:高吞吐、低延迟、多业务隔离的设计与实现
    思考gRPC :为什么是HTTP/2
    HTTP/1HTTP/2HTTP/3
    get_or_create update_or_create
    死锁案例 GAP 锁 没有就插入,存在就更新
    死锁产生必要条件
    京东零售mockRpc实践
    Certbot CA 证书 https
  • 原文地址:https://www.cnblogs.com/jyfyonghu/p/9948181.html
Copyright © 2011-2022 走看看