• [development][semaphore] 信号量/信号灯/信号标/旗语


    前言:

    接续前节 

    [development][C] 条件变量(condition variables)的应用场景是什么

    之前讨论了条件变量的问题, 已经知道在逻辑上, 条件变量(管程)(moniter) 与信号量 逻辑等价. 可以相互实现.

    又知: 二元信号量可以用来实现互斥量.

    那么是不是说进程间交互, 仅使用信号量便已经足够了能?

    另一个问题: 在API层面上,  我们知道互斥量的使用原则是: 谁加锁谁释放. 但是二元信号量的用法却可以是线程A做V操作, 线程B做P操作.

    这是否只是存在于API层面上的区别呢?

    ‎[13:38] ‎<‎tg2arch‎>‎ [lion] tong: 互斥量“就是”初始值为 1 的信号量,也就是二元信号量
    ‎[13:40] ‎<‎tg2arch‎>‎ [lion] 而没人规定信号量应该怎么用(谁获取谁释放),它只是个工具
    ‎[13:40] ‎<‎lilydjwg‎>‎ 还在讨论那些同步工具啊
    ‎[13:40] ‎<‎tg2arch‎>‎ [lion] 如果是初始值为1且获得之后释放。那就是互斥量保护临界区的写法
    ‎[13:41] ‎<‎tong‎>‎ lion: 嗯, 你这么一说, 我好像理解了.
    ‎[13:41] ‎<‎tg2arch‎>‎ [lion] 如果初始值是0,一个线程等待,一个线程运行后释放。那就是一个先后顺序的控制写法
    ‎[13:41] ‎<‎tg2arch‎>‎ [lion] 玩法很多…
    ‎[13:42] ‎<‎tong‎>‎ 嗯....
    ‎[13:42] ‎<‎tong‎>‎ 是不是, 其实只要有信号量就可以了
    ‎[13:42] ‎<‎lilydjwg‎>‎ 对了,Go 的 wait group 算是什么呢?
    ‎[13:42] ‎<‎tg2arch‎>‎ [lion] 如果两对信号量,值相加为 N,那就是一个缓存大小为 N 的生产者消费者模型(阻塞的 FIFO 队列)
    ‎[13:43] ‎<‎tg2arch‎>‎ [lion] waitgroup 即 AND型信号量
    ‎[13:43] ‎<‎tong‎>‎ 哇塞, lion好厉害.

    不知道以上这些内容, 是否存在一个专门的知识分支?

    一本书, 可以深入这个问题, 还没有来的及读:   <<The little book of Semaphores>>  http://greenteapress.com/wp/semaphores/

    其他参考内容:

    https://zh.wikipedia.org/wiki/%E4%BF%A1%E8%99%9F%E6%A8%99

    https://en.wikipedia.org/wiki/Semaphore_(programming)

    https://wizardforcel.gitbooks.io/think-os/content/ch11.html

    API:

    LInux C下有两套信号量的API

    Posix:

    http://man7.org/linux/man-pages/man7/sem_overview.7.html

      有名: sem_open() http://man7.org/linux/man-pages/man3/sem_open.3.html

      无名: sem_init() http://man7.org/linux/man-pages/man3/sem_init.3.html

    System V:

    http://man7.org/linux/man-pages/man2/semget.2.html

    http://man7.org/linux/man-pages/man2/semop.2.html

    http://man7.org/linux/man-pages/man2/semctl.2.html

    关于二者的选用问题, Posix里边如是说:

           System V semaphores (semget(2), semop(2), etc.) are an older
           semaphore API.  POSIX semaphores provide a simpler, and better
           designed interface than System V semaphores; on the other hand POSIX
           semaphores are less widely available (especially on older systems)
           than System V semaphores.

    就是说, 请选用POSIX API !

  • 相关阅读:
    Effective C++_笔记_条款00_基本术语
    SVM(三)—Kernels(核函数)
    SVM(支持向量机)(二)—Lagrange Duality(拉格朗日对偶问题)
    Logistic Regression(逻辑回归)(二)—深入理解
    java程序验证用户名密码和验证码登录的小例子
    java连接MySQL数据库并读取内容
    一个简单的模板了解css+div网页布局
    HTML文件中css样式的引用
    慕课笔记利用css进行布局【混合布局练习】
    慕课笔记利用css进行布局【混合布局】
  • 原文地址:https://www.cnblogs.com/hugetong/p/7808627.html
Copyright © 2020-2023  润新知