zoukankan      html  css  js  c++  java
  • C++互斥器:Semaphores

    类似于Mutex,但信号量Semaphores不仅仅是锁和解锁那么简单,更高级的是,可以被锁住最多n次。

    其中这个n是信号量被产生时指定的n。该值常常被用来代表“可以锁定住一份资源”的线程个数。

    可以把Mutex比作厕所,当一个人进去后,其他人只能等待;

    可以把信号量看作是多个Mutex(多个厕所),反正就3个厕所(一个入口,3个坑),无论等待的有多少人,反正想进去必须等到里面出来一个(如果里面满了);

    在许多系统中,常常使用的是信号量而非Mutex,因为它不一定存在。但是在win32中,我们更多的使用Mutex而不是信号量,Mutex方便嘛,当然用信号量也是可以的。

    常用的信号量接口:

    1. 产生信号量:

    1 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName)
    2 
    3 --lInitialCount:初始值
    4 --lMaximunCount:最大值

    这些值就表示目前可用的资源数,如果为1则表示还有一个锁定工作可以成功,如果现值为5则表示还有5个资源可用。

    每当一个锁定动作成功,则现值就会减一,直到为0时,其他锁定线程只能wait…

    2. 释放信号量

    1 BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);
    2 
    3 --lReleaseCount:释放的数量
    4 --lpPreviousCount:原来(那一时刻)的现值
  • 相关阅读:
    监控体系(二)
    piwik安装部署
    smokeping安装部署
    监控体系(一)
    学习zabbix(九)
    学习zabbix(八)
    学习zabbix(七)
    学习zabbix(六)
    数据结构之树形结构
    数据结构之线性结构
  • 原文地址:https://www.cnblogs.com/davidsguo008/p/3611945.html
Copyright © 2011-2022 走看看