zoukankan      html  css  js  c++  java
  • IPC---信号量

    一、什么是信号量

    信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程) 所拥有。

    信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明 它被占用,测试的线程要进入就绪队列中,等待被唤醒。

    二、信号量的分类
    在学习信号量之前,我们必须先知道——Linux提供两种信号量:
    (1) 内核信号量,由内核控制路径使用
    (2) 用户态进程使用的信号量,这种信号量又分为 POSIX信号量 和 SYSTEM V信号量。


    POSIX信号量又分为有名信号量无名信号量

    有名信号量,其值保存在文件中, 所以它可以用于线程也可以用于进程间的同步。

    无名信号量,其值保存在内存中。

    三、POSIX 信号量与SYSTEM V信号量的比较
    1. 对POSIX来说,信号量是个非负整数。常用于线程间同步

        而SYSTEM V信号量则是一个或多个信号量的集合,它对应的是一个信号量结构体,这个结构体是为SYSTEM V IPC服务的,信号量只不过是它的一部分。常用于进程间同步

    2.POSIX信号量的引用头文件是“<semaphore.h>”,

         而SYSTEM V信号量的引用头文件是“<sys/sem.h>”。

    3.从使用的角度,System V信号量是复杂的,

        而Posix信号量是简单。比如,POSIX信号量的创建和初始化或PV操作就很非常方便。

    三.内核信号量

    1.内核信号量的构成
      内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行。然而,当内核控制路径试图获取内核信号量锁保护的忙资源时,相应的进程就被挂起。只有在资源被释放时,进程才再次变为可运行。

      只有可以睡眠的函数才能获取内核信号量;中断处理程序和可延迟函数都不能使用内核信号量。

    。。。。。。。。。。。。。。。

    参考:

    最全面的linux信号量解析     http://blog.csdn.net/qinxiongxu/article/details/7830537/

    Linux进程间通信——使用信号量      http://blog.csdn.net/ljianhui/article/details/10243617

  • 相关阅读:
    P2765 魔术球问题 网络流二十四题重温
    搬东西 dp
    Q
    P2774 方格取数问题 网络流重温
    2019牛客暑期多校训练1
    E. A Simple Task
    Codeforces Round #575 (Div. 3) 昨天的div3 补题
    自动化测试如何准备测试数据
    金三银四,资深HR给面试者的十大建议
    我的自动化测试之路[转载]
  • 原文地址:https://www.cnblogs.com/wujing-hubei/p/5742915.html
Copyright © 2011-2022 走看看