操作系统中的进程同步与Window中利用内核对象进行线程同步的关系
操作系统中为了解决进程间同步问题提出了用信号量机制,信号量可分为四种类型分别是互斥型信号量,记录型信号量,AND型信号量,信号量集。
互斥型信号量
互斥型信号量是资源数量为1的特殊的记录型信号量。表示对于一类资源且这类资源的数量为1,也就是说任何时候只能有一个进程得到这个资源,其余进程想要获得此资源的进程都将进入等待状态。这与Windows线程同步中的使用的大部分对象很相似,例如自动重置的事件对象,互斥量内核对象,这些对象也是只能有一个线程所占有。但是注意互斥量对象存在一个递归计数,一个线程可以多层拥有一个互斥量对象,只有递归计数值为0时此对象才能重新被触发。
其中注意互斥量内核对象和事件对象都可以命名,这样就可以在不同的进程中请求实现线程同步。
记录型信号量
记录型信号量表示一类资源但是资源的数量可以为多个,也就是说此信号量可以同时被多个进程所拥有。当资源数量全被被其他进程所拥有后如果还有进程请求该资源则会进入等待状态。这与Windows线程同步中的信号灯对象(信号量对象)很相似,信号灯对象可以设置其当前资源数,一般像事件对象和互斥量对象等等其当前资源数为1,而信号灯对象的当前资源数可以大于1,也就是说1个当前资源数大于1的信号灯对象可以被多个线程所拥有的。(注意不要把信号灯的当前资源数与使用计数搞混,更不要和互斥量对象的递归计数混淆)
AND型信号量
表示多类资源的数目为一个,也就是说只有当所有的资源都处于空闲时才会得到这些资源,当然在处理完后也同时释放所有的资源所有权。当有一个资源不空闲时都会使进程处于等待状态。这和Windows中的函数WaitForMultipleObjects(DWORD dwCount,CONST HANDLE* phObjects, BOOL bWaitAll, DWORD dwMilliseconds)其可以用来同时请求多个资源,当参数bWaitAll为TRUE时表示只有当所有的对象都处于激活状态时才会返回,否则处于等待状态。
信号量集
其表示的就是多类资源同时每一类资源还含有多个。
最新文章
- ReactNative入门(安卓)——API(下)
- Linux系统NFS网络文件系统
- UVA 11520 填充正方形
- JS之相等操作符
- [JavaEE] SSH框架笔记_eclipse搭建SSH框架详解
- C#截取字符串的方法小结
- CSS样式表初学,比C#和JS简单
- IOS学习【VMware 12 安装 Mac OS X 10.11】-Day1
- Git 用户名和邮箱
- c/c++ 多线程 thread_local 类型
- Android四大组件应用系列——实现电话拦截和电话录音
- 【HDOJ1811】【并查集预处理+拓扑排序】
- RabbitMQ 安装和说明
- mysqlslap
- WiFi安全测试工具WiFiPhisher
- kaldi解码及特征提取详解
- Virtualbox报错------> VirtualBox虚拟机下鼠标不正常的解决方法
- Linux if 命令判断条件总结
- POJ 3013 【需要一点点思维...】【乘法分配率】
- VS 2017 产品密钥