3.信号灯(重点是记住什么样是激发什么样称为未激发)
信号灯有两种状态,激发和未激发状态,信号灯内部有个计数器,可以理解信号灯内部有N个灯泡,如果有一个灯泡亮着,表示信号灯处于激发状态,如果全部熄灭,信号灯就是处于未激发状态
同样的信号灯的使用也需要初始化它利用的是CreateSemaphore(SECURITY,LONG(初始化计数个数),LONG(计数器最大个数)。LPCTSTR(NAME))
第二个参数表示在初始化的时候计数器的值为多少,第三个参数为信号灯的计数器最大值是多少,如果初始值为0则是未激发的状态,非0则是激发状态
ReleaseSemaphore(HANDLE,LONG(本次操作增加的计数),LONG(以前的计数,传值即可))
如果对信号灯执行一次等待操作,就会减少一个计数,相当于熄灭一个灯,计数为0,也就是所有灯泡全部熄灭,当前线程进入睡眠状态,直到信号灯变为激发状态。

#include "stdafx.h"
#include <windows.h>
void Sub_1();

HANDLE __SemaphoreHandle = NULL;
int main()
{

HANDLE SemaphoreHandle = NULL;
HANDLE ThreadHandle = NULL;
SemaphoreHandle = CreateSemaphore(NULL, 2, 2, NULL); //创建两个亮着的灯泡
WaitForSingleObject(SemaphoreHandle, INFINITE); //变为未激发状态
WaitForSingleObject(SemaphoreHandle, INFINITE);

__SemaphoreHandle =CreateSemaphore(NULL, 2, 2, NULL); //创建两个亮着的灯泡

Sub_1();
WaitForSingleObject(__SemaphoreHandle, INFINITE);
WaitForSingleObject(__SemaphoreHandle, INFINITE);
printf("Input AnyKey To Exit\r\n");
getchar();

return 0;
}

void Sub_1()
{
WaitForSingleObject(__SemaphoreHandle, INFINITE);
ReleaseSemaphore(__SemaphoreHandle, 1, NULL); //点亮一盏灯

printf("Sub_1()\r\n");
Sub_1();
}

转载于:https://www.cnblogs.com/L-Sunny/p/8443420.html

用户模式同步之信号量小解相关推荐

  1. 用户模式下的线程同步

    在以下两种基本情况下,线程之间需要相互通信 1.需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 2.一个线程需要通知其他线程某项任务已经完成. 原子访问相关的内容就直接略过了,因为感觉实 ...

  2. linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断【转】

    转自:http://blog.csdn.net/goodluckwhh/article/details/9006065 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一信号量 ...

  3. 【Windows】线程漫谈——线程同步之信号量和互斥量

    本系列意在记录Windwos线程的相关知识点,包括线程基础.线程调度.线程同步.TLS.线程池等 信号量内核对象 信号量内核对象用来进行资源计数,它包含一个使用计数.最大资源数.当前资源计数.最大资源 ...

  4. 多线程之旅之四——浅谈内存模型和用户态同步机制

     用户态下有两种同步结构的 volatile construct: 在简单数据类型上原子性的读或者写操作   interlocked construct:在简单数据类型上原子性的读和写操作 (在这里还 ...

  5. 理解Windows内核模式与用户模式(新)

    版权声明:本文为博主原创文章,未经博主允许不得转载.  1.基础 运行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式".根据处 ...

  6. 理解Windows内核模式与用户模式

    内核层次架构 windows程序运行分为内核模式和用户模式,内核模式可以访问所有的内存地址空间, 并且可以访问所有的CPU指令.一般程序运行在用户模式, 通过系统调用切换到内核模式执行系统功能,Win ...

  7. 【Linux】线程同步之信号量同步

    linux中两种基本的同步方法是信号量和互斥量.这两种方法很相似,而且它们可以相互通过对方来实现. 信号量概述 下面介绍用信号量进行同步. 信号量概念由荷兰科学家Dijkstra首先提出.信号量是一个 ...

  8. Hive单用户模式搭建

    单用户模式是通过网络连接到一个数据库中,是最经常使用到的模式. 使用hive的前提: (1)启动hadoop集群 (2)启动mysql服务 节点规划: hadoop01为mysql存放元数据 hado ...

  9. 进Linux系统单用户模式,Linux进入单用户模式的两种方法

    单用户模式的作用 在使用Linux系统中,维护人员经常会碰到一个问题,就是在拥有root账号权限和密码的用户中,总是会出现忘记root密码的情况. 遇到这种情况,一般情况下,维护人员就会通过最常用的方 ...

最新文章

  1. 使用代码获得document的related document 列表
  2. 弗吉尼亚州为数据中心建设的电力线路产生争议
  3. 记一次Animator状态快速切换问题的解决
  4. 20171016课程随笔
  5. 征稿延期 | 2019亚洲语言处理国际大会(IALP2019)征稿延期
  6. Dynamic Wallpaper for Mac视频动态壁纸
  7. ./configure 出错Your intltool is too old. You need intltool 0.35
  8. Oracle创建用户、授权、规则
  9. 怎样管理计算机启动项,启动项管理,详细教您电脑开机启动项怎么设置
  10. 四叶草关闭啰嗦模式_利用OCC配置器关闭开机跑代码(啰嗦模式)教程
  11. zip 命令实现批量文件压缩
  12. Unity3D开发之画墙、地面分割(户型绘制)
  13. 用计算机算华为平板密码,华为平板电脑密码忘记怎么办
  14. 会员运营方案纲要和培训(手稿记录)
  15. SLAM论文写作经验 | 小白、跨专业、无人指导、一年多从零到发顶会,他如何做到?
  16. 为UIView绘制单边的boder
  17. 微信小程序设计第一期第六节:图片大小的调整
  18. png格式转eps格式
  19. sencha touch ajax params,sencha touch《实现ajax跨域请求》
  20. Json:前台对象数组传到后台解析

热门文章

  1. Golang 笔记 2 函数、结构体、接口、指针
  2. MDaemon替换注册码怎样人工激活.docx
  3. php168 的采集规则的改动
  4. PHP Composer 新漏洞可引发大规模供应链攻击
  5. 邮件安全上市公司 Mimecast 的部分源代码被 SolarWinds 黑客盗走
  6. SolarWinds 供应链攻击中的第四款恶意软件及其它动态
  7. QEMU CVE-2020-14364 漏洞分析(含 PoC 演示)
  8. 你必须知道的 SmartSql !
  9. VRRP协议与keepalived原理及功能实例演示
  10. 判断点是否在一个矩形内