zoukankan      html  css  js  c++  java
  • posix信号量(sem_t)

    引言

    信号量分为三种:posix有名信号量(使用Posix IPC名字标识,至少具有随内核的持续性)/posix基于内存的信号量(共享内存,随进程的持续性)/System V 信号量(内核

    有了互斥锁和条件变量,为何还要用信号量呢?Posix.1基本原理一文解释了这个问题:信号量的目的主要是用于进程间的同步,这些进程可能共享可能不共享内存区。互斥锁和条件变量是作为线程间的同步机制说明的,这些线程总是共享(某个)内存区。

    信号量还是有一些互斥锁和条件变量所没有的特性:

    (1)互斥锁必须由上锁的进程解锁。信号量没有这个限制(想一想操作系统课上讲的关于信号量的P V原语)。

    (2)互斥锁要么被锁住,要么被解锁。类似于二值信号量。

    (3)当向一个条件变量发送信号,如果没有线程等待在这个条件变量上(可能线程被取消),那么该信号将丢失。然而,信号量的加1操作总是被记住的(具体被谁记住,这个地方读者思考)。

    posix有名信号量

    1、FIFO实现

    比较简单,因为内核提供的read和write函数处理了不少同步的需求。

    2、内存映射I/O实现

    与posix消息队列内存映射I/O实现类似,用到互斥锁和条件变量。

    3、System V信号量来实现

    他同时提供了访问System V信号量的一个更简单的接口。

    总结

    有名信号量总是能够在不同进程间共享。基于内存的信号量必须在创建时指定是否在内存间共享。

  • 相关阅读:
    为服务部署 Jekins的使用
    spring cloud
    docker
    WebSocket
    idea
    maven
    SQL四种语言(DDL、 DML、 DCL、 TCL)
    十大经典排序
    AVL树的旋转图解和简单实现
    多个线程交替打印
  • 原文地址:https://www.cnblogs.com/sylz/p/6033353.html
Copyright © 2011-2022 走看看