• Semaphore信号量 主要用于线程同步,多个线程同时访问一个方法时,如何保证访问有序,不出现紊乱的情况下,就可以使用 Semaphore信号来避免这一问题。
  • 使用步骤:
    • 1.创建信号量:HANDLE WINAPI CreateSemaphoreW( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, __in LONG lInitialCount, __in LONG lMaximumCount, __in_opt LPCWSTR lpName ); #ifdef UNICODE #define CreateSemaphore CreateSemaphoreW
    • 2.等待信号量结束

WINBASEAPI
DWORD
WINAPI
WaitForSingleObject(__in HANDLE hHandle,__in DWORD dwMilliseconds);
  • 3.释放信号量ReleaseSemaphore

  • 实例代码

// SemaphoreControl.cpp : 定义控制台应用程序的入口点。
// 线程同步----信号量控制#include "stdafx.h"using namespace std;
HANDLE g_hSemaphore = nullptr; //声明全局信号量//吃东西
void WINAPI eatFood(LPVOID lpParams)
{int i = 0;for (i = 0; i < 20; i++){WaitForSingleObject(g_hSemaphore,INFINITE);cout << "吃了" << i+1 << "份零食" << endl; ReleaseSemaphore(g_hSemaphore,1,nullptr);}}int _tmain(int argc, _TCHAR* argv[])
{//创建信号量g_hSemaphore = CreateSemaphore(NULL,1,1,NULL);if (!g_hSemaphore){cout << "信号量创建失败" << endl;}DWORD threadId = 0;HANDLE hThread = CreateThread(nullptr,0,(LPTHREAD_START_ROUTINE)eatFood,nullptr,0,&threadId);HANDLE h1Thread = CreateThread(nullptr,0,(LPTHREAD_START_ROUTINE)eatFood,nullptr,0,&threadId);WaitForSingleObject(hThread,INFINITE);CloseHandle(hThread);system("pause");return 0;
}

运行结果:

C++ Semaphore信号量使用相关推荐

  1. 线程 信号量 java_JAVA多线程-Semaphore信号量

    一.概述 Semaphore(信号量) 是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失,或者像锁一样用于保护一个关键区域,可以控制同时访问的线程个数,并且通过acquire()方法获取一 ...

  2. Java并发编程中级篇(一):使用Semaphore信号量进行并发控制

    2019独角兽企业重金招聘Python工程师标准>>> Semaphore是一个二进制信号量,只有0和1两个值.如果线程想要访问一个共享资源,它必须先获得信号量.如果信号量的内部计数 ...

  3. pthread-win32 semaphore信号量总结

    最近的多线程 想实现这样的功能: 多线程Socket获得的数据 对其进行某种处理FuncA,但是FuncA比较耗时,希望能够单独独立出来,这样 接受和处理数据分开,但是FuncA处理数据不能放入一个线 ...

  4. Java Semaphore 信号量

    Java Semaphore 信号量 Semaphore 是一种基于计数的信号量.它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞.S ...

  5. Linux 信号量 源码,一文读懂go中semaphore(信号量)源码

    运行时信号量机制 semaphore 前言 最近在看源码,发现好多地方用到了这个semaphore. 本文是在go version go1.13.15 darwin/amd64上进行的 作用是什么 下 ...

  6. Java并发编程笔记之Semaphore信号量源码分析

    JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那 ...

  7. python并发编程之semaphore(信号量)_浅谈Python并发编程之进程(守护进程、锁、信号量)...

    前言:本博文是对Python并发编程之进程的知识延伸,主要讲解:守护进程.锁.信号量. 友情链接: 一.守护进程(daemon) 1.1 守护进程概念 首先我们都知道:正常情况下,主进程默认等待子进程 ...

  8. Linux系统编程:使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型

    代码实现 如题,使用semaphore信号量和mutex互斥量实现多个生产者和消费者模型.本来是想只用信号量实现生产者消费者模型的,但是发现 只能在一个生产者和一个消费者之间,要在多个生产者和消费者模 ...

  9. 同步工具之Semaphore信号量

    Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源.Semaphore就相当于一个许可证,线程需要先通过acquire()方法获取该许可证, ...

  10. java控制并发数量_Java并发编程中级篇(二):使用Semaphore信号量进行多个资源并发控制...

    上一节中我们使用了Semaphore信号量保护共享资源,但是它只能保护一个共享资源,当我们需要同时保护多个共享资源的时候,我们只需要在创建信号量的时候使用new Semaphore(int)构造方法, ...

最新文章

  1. 使用SALT-API进入集成开发的简单样例
  2. Spring IOC-BeanFactory的继承体系结构
  3. 全栈测试:平衡单元测试和端到端测试
  4. 【转】linux内核态和用户态的区别
  5. ZooKeeper学习总结(3)——ZooKeeper常见面试题
  6. 有关《伟大的ScrumMaster》的问答
  7. 小Q正在给一条长度为n的道路设计路灯安置方案。 为了让问题更简单,小Q把道路视为n个方格,需要照亮的地方用'.'表示, 不需要照亮的障碍物格子用'X'表示。
  8. 2月18日 Ubuntu 14.04下安装Gazebo(用于仿真)
  9. MyBatis配置项--配置环境(environments)
  10. paip.版本控件svn删除文件或目录后的恢复
  11. Unix/Linux编程:Unix文件系统回顾
  12. 最新Erphpdown v13.11modown8.02主题破jie版去授权无域名限制版本
  13. 未来的计算机100字的小短文,关于电脑作文100字
  14. 苹果微信点开才会收到信息_安卓版微信黑暗模式来了!这次你会更新吗?附微信7.0.13安装包...
  15. 程序员跳槽一次到底能涨多少?今天带你见识下跳槽天花板
  16. 巧用键盘鼠标!打字更快—办公效率更好!
  17. 数字后端入行门槛和条件?附入行进阶必读书籍丨建议收藏
  18. [渝粤教育] 西南科技大学 公共组织学 在线考试复习资料
  19. 如何使用Docker发布SpringBoot项目
  20. 修复WIN7系统开机黑屏,只剩下鼠标能动的问题。

热门文章

  1. redis学习-redis事务
  2. 什么时候学习编程都不晚
  3. CTS 2019 Pearl
  4. 团队作业3:团队项目原型设计与开发
  5. c++课程学习(未完待续)
  6. 精化集ASP.NET AJAX与ASP.NET MVC分类第二轮筛选结果
  7. macos 判断走无线网还是有线网_“第一次约会,就想发生关系”:怎样判断男人对你走心还是走肾?...
  8. linux mp4v2编译,Android 编译mp4 v2 2.0.0生成动态库
  9. 知识图谱java实现_知识图谱:neo4j(四)Java API
  10. 双时隙的工作原理_提高频点利用 海能达双时隙功能效率高