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

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

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

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

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

常用的信号量接口:

1. 产生信号量:

 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName)

 --lInitialCount:初始值
--lMaximunCount:最大值

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

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

2. 释放信号量

 BOOL ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);

 --lReleaseCount:释放的数量
--lpPreviousCount:原来(那一时刻)的现值

C++互斥器:Semaphores的更多相关文章

  1. 第4章 同步控制 Synchronization ----互斥器(Mutexes)

    Win32 的 Mutex 用途和 critical section 非常类似,但是它牺牲速度以增加弹性.或许你已经猜到了,mutex 是 MUTual EXclusion 的缩写.一个时间内只能够有 ...

  2. windows核心编程-互斥器(Mutexes)

    线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了临界区线程同步-----windows核心编程-关键段(临界区)线程同步,这章我来介绍一下互斥器(Mutexes)在线程同步中的 ...

  3. window下线程同步之(Mutex(互斥器) )

    使用方法: 1.创建一个互斥器:CreateMutex: 2.打开一个已经存在的互斥器:OpenMutex: 3.获得互斥器的拥有权:WaitForSingleObject.WaitForMultip ...

  4. C++互斥器:Mutex

    互斥器的功能是,使多个线程和谐工作.同一时间内,只能有一个线程得到互斥对象,并获得资源操作权限,那么如果同一时间其他线程也想去操作资源,此时就会因为Mutex未处于激发状态,而无奈的等待…这时候,线程 ...

  5. OpenMP 线程互斥锁

    OpenMP是跨平台的多核多线程编程的一套指导性的编译处理方案(Compiler Directive),指导编译器将代码编译为多线程程序. 多线程编程中肯定会涉及到线程之间的资源共享问题,就可以使用互 ...

  6. win32多线程程序设计笔记(第四章下)

    上一笔记讲了同步机制中的临界区域(Critical Sections).互斥器(Mutexes),下面介绍同步机制中的另外两种. 信号量(Semaphores) 举个例子: 现在有人要租车,接待他的代 ...

  7. 线程的同步控制(Synchronization)

    临界区(Critical Sections) 摘要 临界区(Critical Section) 用来实现"排他性占有".适合范围时单一进程的各线程之间. 特点 一个局部对象,不是一 ...

  8. vc++高级班之多线程篇[7]---线程间的同步机制②

    //示例代码: CStringArray g_ArrString; UINT __cdecl ThreadProc(LPVOID lpParameter) {  int startIdx = (int ...

  9. Win32多线程之核心对象

    CreateThread()传回两个值,用以识别一个新的线程.第一个值是个Handle,  这也是CreateThread()的返回值,大部分与线程有关的API函数都需要它.第二个值是由lpThrea ...

随机推荐

  1. css3 fileter始终效果 图片渲染

    http://www.w3cplus.com/css3/ten-effects-with-css3-filter

  2. Hive—简单窗口分析函数

    hive 窗口分析函数 : jdbc:hive2:> select * from t_access; +----------------+---------------------------- ...

  3. 对于局部变量,text、ntext 和 image 数据类型无效

    开发存储过程时报如上错误.大多数人说用varchar(8000)代替text,但值我这里超过8000,不可取 解决: sql2005或以上版本支持新数据类型:varchar(max)nvarchar( ...

  4. springMVC将处理的后的数据通过post方法传给页面时,可能会出现乱码问题,下面提出解决post乱码问题的方法

    在web.xml中加入: <!-- 解决post乱码问题 --> <filter> <filter-name>CharacterEncodingFilter< ...

  5. .NET获得上传图片宽高

    代码: //图片大小限制--------------------------- System.Drawing.Image txtStoryimage = System.Drawing.Image.Fr ...

  6. Ubuntu 下如何查看已安装的软件

    1.查看安装的所有软件 dpkg -l 例如:dpkg -l | grep ftp <span style="font-size:18px;">:~$ dpkg -l ...

  7. Linux dkpg命令

    一.简介 dpkg 是Debian Package 的简写,是Debian系列系统下的一个软件安装.更新及移除工具. 二.常用指令 1.查询功能 查看软件包信息: dpkg -info xxx.deb ...

  8. 解决 Ubuntu 下 sudo 命令执行速度慢的问题

    1.首先如果当用登录的用户名不在"/etc/sudoers"文件中,是不能执行sudo命令的.可以用root身份手动修该文件,把当前登录用户名加入该文件中. 2.用"ho ...

  9. Linux sudo 错误:XXX is not in the sudoers file 解决办法

    最近在学习linux,在某个用户(xxx)下使用sudo的时候,提示以下错误:xxx is not in the sudoers file. This incident will be reporte ...

  10. <摘录>开源软件架构-ZeroMQ

    原文链接:http://www.aosabook.org/en/zeromq.html ØMQ是一个消息通信系统,如果你愿意的话也可以称其为“面向消息的中间件”.ØMQ的应用环境很广泛,包括金融服务. ...