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

  • 相关阅读:
    实现自己的Linq to Sql
    [分享] 浅谈项目需求变更管理
    【分享】老程序员的经验和价值在哪里?
    程序员是自己心中的“上帝”
    [分享]解析“程序员的十大技术烦恼”
    【分享】帮助你早些明白一些道理
    “风雨20年”的20条精辟编程经验
    【分享】 优秀程序员的代码是“活的”
    给开发人员培训时的语录
    【分享】SQL Server优化50法
  • 原文地址:https://www.cnblogs.com/wujing-hubei/p/5742915.html
Copyright © 2011-2022 走看看