操作系统中为了解决进程间同步问题提出了用信号量机制,信号量可分为四种类型分别是互斥型信号量,记录型信号量,AND型信号量,信号量集。

互斥型信号量

互斥型信号量是资源数量为1的特殊的记录型信号量。表示对于一类资源且这类资源的数量为1,也就是说任何时候只能有一个进程得到这个资源,其余进程想要获得此资源的进程都将进入等待状态。这与Windows线程同步中的使用的大部分对象很相似,例如自动重置的事件对象,互斥量内核对象,这些对象也是只能有一个线程所占有。但是注意互斥量对象存在一个递归计数,一个线程可以多层拥有一个互斥量对象,只有递归计数值为0时此对象才能重新被触发。

其中注意互斥量内核对象和事件对象都可以命名,这样就可以在不同的进程中请求实现线程同步。

记录型信号量

记录型信号量表示一类资源但是资源的数量可以为多个,也就是说此信号量可以同时被多个进程所拥有。当资源数量全被被其他进程所拥有后如果还有进程请求该资源则会进入等待状态。这与Windows线程同步中的信号灯对象(信号量对象)很相似,信号灯对象可以设置其当前资源数,一般像事件对象和互斥量对象等等其当前资源数为1,而信号灯对象的当前资源数可以大于1,也就是说1个当前资源数大于1的信号灯对象可以被多个线程所拥有的。(注意不要把信号灯的当前资源数与使用计数搞混,更不要和互斥量对象的递归计数混淆)

AND型信号量

表示多类资源的数目为一个,也就是说只有当所有的资源都处于空闲时才会得到这些资源,当然在处理完后也同时释放所有的资源所有权。当有一个资源不空闲时都会使进程处于等待状态。这和Windows中的函数WaitForMultipleObjects(DWORD dwCount,CONST HANDLE* phObjects, BOOL bWaitAll, DWORD dwMilliseconds)其可以用来同时请求多个资源,当参数bWaitAll为TRUE时表示只有当所有的对象都处于激活状态时才会返回,否则处于等待状态。

信号量集

其表示的就是多类资源同时每一类资源还含有多个。

操作系统中的进程同步与Window中利用内核对象进行线程同步的关系的更多相关文章

  1. Windows核心编程学习九:利用内核对象进行线程同步

    注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...

  2. MySQL中的连接、实例、会话、数据库、线程之间的关系

    MySQL中的实例.数据库关系简介 1.MySQL是单进程多线程(而Oracle等是多进程),也就是说MySQL实例在系 统上表现就是一个服务进程,即进程(通过多种方法可以创建多实例,再安装一个端口号 ...

  3. windows环境利用semophore机制进行线程同步

    semophore是信号量的意思,常用于PV操作,所谓PV操作就是pend(等待,直到有资源可用,并且消耗资源) V就是释放资源. semophore和mutex区别,mutex本意为互斥,用于线程独 ...

  4. C#中的几个线程同步对象方法

    在编写多线程程序时无可避免会遇到线程的同步问题.什么是线程的同步呢? 举个例子:如果在一个公司里面有一个变量记录某人T的工资count=100,有两个主管A和B(即工作线程)在早一些时候拿了这个变量的 ...

  5. 【Windows 操作系统】Windows 进程的内核对象句柄表

    总结: 1.句柄就是进程句柄表中的索引.2.句柄是对进程范围内一个内核对象地址的引用,一个进程的句柄传给另一个进程是无效的.一个内核对象可用有多个句柄.Windows之所以要设立句柄,根本上源于内存管 ...

  6. 【Windows 操作系统】 内核对象|句柄

    内核对象简介 内核对象就是 一些数据结构该结构用来描述存储内核中的一个内存块中的数据信息.   内存块是一种数据结构,其中的数据成员负责维护该对象的相应信息,这个数据结构以及其中的数据成员只能由内核访 ...

  7. VC中利用多线程技术实现线程之间的通信

    当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...

  8. Window中的内存地址(小知识)

    现在的编辑器大部分工作都是内存管理托管型,所以很少直接对Window的内存地址直接管理了. Window中的内存地址主要是以16进制数字体现的,当操作系统为32位时,那么每个内存地址为2的32次方,也 ...

  9. 5、CPU 的线程与操作系统的线程有何关系?操作系统中的进程和线程是什么关系?

    CPU中的线程和操作系统(OS)中的线程即不同,在调度的时候又有些关联.CPU中的线程,我们叫它们Thread,和OS中的线程的名字一样.它来自同步多线程(SMT,Simultaneous Multi ...

随机推荐

  1. UML类图画法整理

    一 类图画法 1.类图的概念 显示出类.接口以及他们的静态结构和关系,用于描述系统的结构化设计. 2.类 类是对一组具有相同属性.操作.关系和语义对象的抽象,是面向对象的核心,包括名称.属性和方法.如 ...

  2. python-递归函数和内置函数笔记汇总

    1. def syz(*args)    #    *args  参数组 不必填,不限制参数的个数    参数组不常用 2.def sys2(**kwargs): #关键字参数 3.递归函数,  不常 ...

  3. 2019_西湖论剑_预选赛 testre

    2019_西湖论剑_预选赛 testre 程序中关键操作是比较ptr,其中夹杂的一部分v26计算是为了混淆我们的分析.那么我们只要跟踪ptr数组的生成便可,向上发现v11,加密操作数组. 接下来跟踪v ...

  4. 攻防世界 reverse re4-unvm-me

    re4-unvm-me alexctf-2017 pyc文件,祭出大杀器EasyPythonDecompiler.exe 得到源代码: 1 # Embedded file name: unvm_me. ...

  5. Apache JMeter 5.4.1 Build Development

                    1. 说明 经过漫长的等待终于将开发环境搭建成功了!网络慢真的是伤不起!grade,确实要比maven简洁.....嗯!真香! 2. 工具准备 JDK1.8+ 这... ...

  6. K8S 上部署 Redis-cluster 三主三从 集群

    介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...

  7. sqlserver 计算同比,环比增长

    /****** Script for SelectTopNRows command from SSMS ******/ SELECT [fdSequenceID] ,[fdInnerTime] ,[f ...

  8. 《青橙商城》day01避坑指南

    1.persistence-api报红 问题: 在模块qingcheng_pojo下的pom.xml中,报红 <dependencies> <dependency> <g ...

  9. 《Effective C++》部分内容学习笔记整理

    简介 此笔记为<Effective C++>中部分内容的学习笔记. 目录 文档:<Effective C++>

  10. Day14_84_通过反射机制修改和获取class里的属性值

    通过反射机制修改和获取class里的属性值 * 属性对象.set(Object,属性值) 给Object对象中的某个属性赋值(属性对象) * 属性对象.get(Object); 获取Object对象中 ...