一、线程间同步的几种方式

从上篇博文中可以发现,当多个线程对同一资源进行使用时,会产生“争夺”的情况,为了避免这种情况的产生,也就出现了线程间的同步这个技术。线程间的同步有多种方式,在接下来的博文中我会依次介绍几种主流的同步方式,以及他们之间的区别。在本篇博文中将介绍使用信号量Semaphore达到线程间同步的目的。老规矩,所有代码都讲在win32平台和Linux平台下都实现一遍。

相关函数和头文件

//头文件

#include

//创建信号量API

HANDLE WINAPI CreateSemaphore(

_In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,//指向SECURITY_ATTRIBUTES的指针;

_In_ LONG lInitialCount, //信号量对象的初始值;

_In_ LONG lMaximumCount, //信号量对象的最大值,这个值必须大于0;

_In_opt_ LPCTSTR lpName //信号量对象的名称;

);

//等待信号量API

DWORD WINAPI WaitForSingleObject(

_In_ HANDLE hHandle, //信号量对象句柄

_In_ DWORD dwMilliseconds //等待信号量时间,INFINET代表永久等待;

);

返回值:

WAIT_ABANDONED(0x00000080L) 表示拥有信号量的线程再终止前未释放该信号量;

WAIT_OBJECT_0(0x00000000L) 表示等到了信号量;</

linux带有超时等待的信号量,C++多线程同步之Semaphore(信号量)相关推荐

  1. 32 多线程同步值Semaphore(信号量)

    互斥锁是只允许一个线程访问共享数据,而信号量是同时允许一定数量的线程访问共享数据,比如银行柜台有5个窗口,允许同时有5个人办理业务,后面的人只能等待,待柜台有人办理完业务后才可以进行相应的柜台办理. ...

  2. C++多线程同步之Semaphore(信号量)

    https://blog.csdn.net/oLanSeFengYe1/article/details/52780439 转载于:https://www.cnblogs.com/eustoma/p/1 ...

  3. Python之进程+线程+协程(同步对象、信号量、队列)

    文章目录 Event同步对象 semaphore信号量 队列 本篇是关于Python进程方面的内容了,主要是Event同步对象,信号量和队列 Event同步对象 1.概念: 我们可以对一个线程set一 ...

  4. Linux 多线程同步机制:互斥量、信号量、条件变量

    互斥量:互斥量提供对共享资源的保护访问,它的两种状态:lock和unlock,用来保证某段时间内只有一个线程使用共享资源,互斥量的数据类型是pthread_mutex_t 主要涉及函数:pthread ...

  5. c++ linux 线程等待与唤醒_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  6. linux connect 阻塞超时时间,在linux下玩转带有超时时间的connect函数

    在之前的文章中,我们在Windows下玩过带有超时时间的,本文我们在linux下来玩.在某次面试中,还被遇到了这个问题,有意思. 直接上客户端代码: #include #include #includ ...

  7. Linux多线程同步——信号量

    线程同步 同步主线程与子线程 test.c #include <pthread.h> #include <sys/syscall.h> #include <fcntl.h ...

  8. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  9. Linux内核中的同步原语:自旋锁,信号量,互斥锁,读写信号量,顺序锁

    Linux内核中的同步原语 自旋锁,信号量,互斥锁,读写信号量,顺序锁 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Linux 内核中的同步原 ...

最新文章

  1. 微信小程序顶部tab切换以及滑动
  2. 学习前端工程师手册--学习记录
  3. android 将IE设为默认打开的浏览器
  4. SQL Where in list 问题
  5. Python 安装与环境变量配置
  6. GBK转unicode码查询表的改进
  7. 学习笔记:自己编译安装OpenCV+测试opencv安装是否成功
  8. 性能测试流程和各阶段的工作
  9. shell机器人企业微信通知
  10. mupdf添加图片水印_在博客园里给图片加水印(canvas + drag)
  11. html网页接单广告词,最吸引人的网站宣传广告词
  12. 在idea中使用git详解
  13. 基于Matlab的简单视频处理
  14. XnViewMP 压缩图片
  15. Permutation test(排列(组合)检验)
  16. 光伏储能联合运行的直流微电网matlab/simulink 光伏+MPPT控制 储能系统双向DCDC充放电控制
  17. 【UnityC#】写了一个事件分发器
  18. 2022年汽车零部件行业前景
  19. ToList()方法
  20. Idea设置:注释模板

热门文章

  1. 树莓派python编程小车_00-树莓派做的遥控小车 python
  2. ubuntu18.04双系统安装教程
  3. 三层神经网络实现分类器
  4. netty 服务端主动向客户端发信息
  5. 【操作系统】进程-哲学家进餐问题
  6. Uderstanding and using Pointers 读书笔记
  7. codeforce 555 div3 题解报告
  8. Java 9 与 Java 10
  9. 单片机:直流电机(内含ULN2003芯片,硬件原理及解析,软件编程及注释)
  10. samba服务器的安装