<一>线程间同步原因

  1. 线程间竞争共享资源;
  2. 线程间为完成某个任务而协作;

通过互斥量可以实现线程间由于竞争所需要的同步,通过事件可以实现线程间由于协作所需要的同步。

信号量很好地将互斥量和事件结合起来,同时解决竞争和协作问题。

信号量的两个核心操作:提高计数值和降低计数值(Up 和 Down)。Down操作时检查信号量的计数值是否大于0,如果大于0,则信号量的计数值减1,线程继续运行;如果计数值为0,线程由于不能获得信号量而进入睡眠状态。这两个操作都是不可再分的操作。

与信号量有关的函数:

函数名 作用
CreateSemaphore 创建一个信号量
OpenSemaphore 打开一个已经创建的信号量
ReleaseSemaphore 释放对信号量的所有权

老规矩,看例子:

#include <windows.h>
#include <process.h> /* _beginthread, _endthread */
#include <iostream>
#include <fstream>
using namespace std;HANDLE hSemaphore;DWORD WINAPI myThread(LPVOID lpParam)
{int* pNo = (int*)lpParam;WaitForSingleObject(hSemaphore,INFINITE);//等待信号量
cout<<"*****Thread #"<<*pNo<<" Get the semaphore"<<endl;Sleep(1000*(*pNo));cout<<"*****Thread #"<<*pNo<<" release the semaphore"<<endl;ReleaseSemaphore(hSemaphore,1,NULL);//指定要信号量的计数值增加1return 1;
}int main()
{DWORD dw;hSemaphore = CreateSemaphore(NULL,3,3,NULL);//初始值为3,最大值也为3的信号量int t[6];for (int i=0;i<6;i++){t[i]=i+1;CreateThread(NULL,0,myThread,t+i,0,&dw);}Sleep(60000);return 0;
}

转载于:https://www.cnblogs.com/LCCRNblog/p/3386236.html

Windows环境下多线程编程原理与应用读书笔记(8)————信号量及其应用相关推荐

  1. Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI

    Windows环境下Unicode编程总结 UNICODE环境设置 在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下. UN ...

  2. windows环境下unicode编程总结

    windows环境下unicode编程总结 UNICODE环境设置 在安装Visual Studio时,在选择VC++时需要加入unicode选项,保证相关的库文件可以拷贝到system32下. UN ...

  3. 笔记:windows环境下线程编程(C++实现同步与互斥)

    Windows系统为我们提供了相关API,我们可以使用他们来进行多线程编程. 1.创建一个线程,参数解释如下: HANDLE CreateThread(LPSECURITY_ATTRIBUTES lp ...

  4. (一)Windows环境下汇编编程读书笔记

    看了一节关于80x86系列处理器简史,不知道云里和雾里,什么晶体管啊,什么什么之类的不知道云里和雾里,看了讲什么都不知道啊! 转载于:https://www.cnblogs.com/Nuxgod/ar ...

  5. java多线程编程_《java多线程编程实战指南》读书笔记 -- 基本概念

    展开 并发:多个线程操作相同资源,保证线程安全,合理使用资源 高并发:服务能同时处理多个请求,提高程序性能 测试上下文切换工具 Lmbench3 测量上下文切换时长 vmstat 测量上下文切换次数 ...

  6. java 内存映射文件进程间通讯_[转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile...

    进程间的通信方式有很多种, 上次我们说了最傻瓜的"共享外存/文件"的方法. 那么, 在本文中, 我们即将学习"共享内存"的方式实现进程间的通信, 这是IPC最快 ...

  7. Windows环境下实现设计模式——模板方法模式(JAVA版)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现模板方法模式(设计模式). 不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式 ...

  8. Windows环境下实现设计模式——访问者模式(JAVA版)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现访问者模式(设计模式). 不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式, ...

  9. Windows下多线程编程技术及其实现

    本文首先讨论16位Windows下不具备的线程的概念,然后着重讲述在32位Windows 95环境下多线程的编程技术,最后给出利用该技术的一个实例,即基于Windows95下TCP/IP的可视电话的实 ...

最新文章

  1. 一个适合于Python 初学者的入门练手项目
  2. 某程序员感叹自己学历虽低,却能进入阿里!虽然只是p6,却面过不少清北毕业生!清北毕业生也没什么了不起,水货一抓一大把!...
  3. 编程算法 - 字典分词 代码(C)
  4. Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
  5. 车辆管理系统之开始自己的任务(三)
  6. tomcat服务组件详解(二)
  7. Andy's First Dictionary
  8. 工厂模式和抽象工厂模式的区别
  9. talent-validate-all.js验证框架
  10. P2327 [SCOI2005]扫雷
  11. java html 区别是什么意思_Java html 区别是什么
  12. Struts2学习笔记(七) 结果(Result)(下)
  13. 【常识】—— 生物学
  14. android出现anr(application not response)的分析
  15. dude由于目标计算机,The Dude的教程
  16. oracle永久表设置,Oracle 表空间简单管理永久表空间
  17. python实现matlab_python 实现matlab的mapminmax方法
  18. VLAN(虚拟局域网)
  19. 哔哩哔哩视频下载助手
  20. 计算机无法读光盘,win10系统无法读取光盘如何解决 win10系统读取光盘失败的解决方法...

热门文章

  1. 【综述】基于Transformer的视频语言预训练
  2. 大数据分析实战-信用卡欺诈检测(三)- 模型评估
  3. 乾坤大挪移——冒泡法排序,良心之作,拒绝入坑
  4. 就业寒冬,从拉勾招聘看Python就业前景
  5. Tensorflow教程: tf.Variable() 和tf.get_variable()
  6. 2014秋应用计算机,2014年秋计算机应用基础》期末试卷A(A3版).doc
  7. 学计算机必须学会模拟电路,2016年广西大学计算机与电子信息学院1304电路分析基础与模拟电子线路之电路分析基础复试笔试仿真模拟题...
  8. python3迭代器和可迭代对象,Python3学习(8)--迭代,可迭代的和迭代器
  9. kibana 查询_干货 | Elasticsearch、Kibana数据导出实战
  10. 滴滴人脸识别申诉照片怎么拍_涅槃乐队Nevermind封面照片是怎么拍出来的?