信号量 与 互斥量的区别_信号量和互斥量的区别_likaistart的博客-程序员秘密

技术标签: Java多线程  操作系统  信号量 与 互斥量的区别  

原文来源:https://blog.csdn.net/ZhipingXi/article/details/78031307
信号量 与 互斥量(锁)的区别
 

一、概念和定义
    信号量:多线程同步使用的;一个线程完成某个动作后通过信号告诉别的线程,别的线程才可以执行某些动作;
    互斥量:多线程互斥使用的;一个线程占用某个资源,那么别的线程就无法访问,直到该线程离开,其他线程才可以访问该资源;


二、信号量 与 互斥量的区别
    1、互斥量用于线程的互斥,信号量用于线程的同步:
        互斥:指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排他性。但是互斥无法限制访问者对资源的访问顺序,所以访问是无序的;
        同步:指在互斥的基础上(多数情况),通过其他机制实现访问者对资源的有序访问。大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况指可以允许多个访问者同时访问资源。

    2、互斥量值只能是0/1,信号量值可以为非负整数:
        一个互斥量只能用于一个资源的互斥访问不能实现多个资源的多线程互斥问题;
        一个信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量时,也可以完成一个资源的互斥访问;

    3、互斥量的加锁和解锁必须由同一线程分别对应使用;而信号量可以由一个线程释放,另外一个线程得到。
    

三、信号量与互斥量的详细分析
    信号量--Semaphore:
        分类:
            二进制信号量(Binary Semaphore):只允许信号量取0或1值,其同时只能被一个线程获取;
            整型信号量(Integer Semaphore):信号量取值是整数,可被多个线程同时获得,直到信号量的值变为0;
            记录型信号量(Record Semaphore):每个信号量s除以一个整数值value(计数)外,还有一个等待队列List,其中是阻塞在该信号量的各个线程的标识。
                当信号量被释放1个,值被加1后,系统自动从等待队列中唤醒一个等待中的线程;让其获得信号量,同时信号量再减1。
                
        Semaphore 抽象操作:
            create() / wait() / post() / trywait() / destroy()
    
    互斥量--Mutex:
        互斥量表现互斥现象的数据结构,常用作保护从中断来的临界段代码并且在共享同步使用的资源;
        Mutex本质就是一把锁,提供对资源的独占式访问,所以Mutex主要的作用是互斥。
        Mutex 抽象操作:
            create() / lock() / unlock() / destroy()
--------------------- 
作者:zhipingxi 
来源:CSDN 
原文:https://blog.csdn.net/ZhipingXi/article/details/78031307 
版权声明:本文为博主原创文章,转载请附上博文链接!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35939148/article/details/86646749

智能推荐

小白科研笔记:简析论文DeepGCNs: Can GCNs Go as Deep as CNNs_resgcn-can gcns go as deep as cnns?_Niuip的博客-程序员秘密

1. 前言这篇博客主要分析一篇ICCV 2019的一篇深度图卷积网络性能的文章DeepGCNs: Can GCNs Go as Deep as CNNs。这篇文章的核心创新点是把残差连接(Residual Connection)和全连接方式(Dense Connection)从二维卷积迁移到图卷积中,同时把空洞卷积(Dilated Convolution)概念延伸至图卷积中。这篇文章其实比较通俗易懂,咱就直接讲解核心点。2. 创新点2.1 图神经网路的残差连接作者所做的所有实验都是关于室内场景下点云

安装完Python3.7后运行提示丢失api-ms-win-crt-runtime-l1-1-0.dll_孙强_0525的博客-程序员秘密

个人遇到该问题后依照百度经验安装Visual C++ Redistributable for Visual Studio 2015,发现该提示仍然出现,后将C:\Windows\SysWOW64(我的电脑是64位系统)下的api-ms-win-crt-runtime-l1-1-0.dll剪切到其他地方,然后运行Visual C++ Redistributable for Visual Studio...

LittleFS - 一个高度完整的嵌入式文件系统_lfs_file_t_yi412的博客-程序员秘密

LittleFS - 一个高度完整的嵌入式文件系统 拥有小巧灵活的文件系统对许多物联网设备至关重要。使用文件系统并将其与正确的存储技术(如外部闪存或SD卡)配对可能很困难。Mbed操作系统使文件系统的组合变得简单。Mbed OS 5.7既支持FAT文件系统,又引入了高度集成的嵌入式文件系统。这包括对没有自己的磨损平衡控制器的闪存芯片的磨损平衡支持。LittleFS  - 一个高度完整的...

飞桨万能转换小工具X2Paddle,教你玩转模型迁移_飞桨PaddlePaddle的博客-程序员秘密

百度推出飞桨(PaddlePaddle)后,不少开发者开始转向国内的深度学习框架。但是从代码的转移谈何容易,之前的工作重写一遍不太现实,成千上万行代码的手工转换等于是在做...

想成为牛逼程序员? 先数数编程语言之父们的头发_weixin_34032792的博客-程序员秘密

http://developer.51cto.com/art/201709/551494.htm有一种生物,人称“程序猿” or “攻城狮”工作是高端大气上档次,工资是低调奢华接地气!往往城还没攻下来,头发就先掉下来!世人眼中的当程序员的必经之路是这样的找不到女朋友的原因是这样的事实是否如上所说的那样呢?那就不得而知了,不过深入了解了解那些编程语言之父们头顶的雨林是...

编程训练新郎新娘_hiphopmattshi的博客-程序员秘密

这道题目的类似问题有很多,可是如何解决这种问题,需要一定的抽象技巧题目中说,他们说的话全假,那么就多了几个判断条件。假设A 为 1,B为2,C为3 。其中 x!=1表示x的未婚夫不是Az!=3表示z的未婚夫不是Cx!=3 表示x的未婚夫不是c同时当然不能出现重婚的现象咯因此最简单的穷举法 就可以发挥了代码如下:#inc

随便推点

后端程序员必会的Linux基础知识总结_程序员亮哥的博客-程序员秘密

一 从认识操作系统开始1.1 操作系统简介我通过以下四点介绍什么操作系统:操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;操作系统本质上是运行在计算机上的软件程序 ;为用户提供一个与系统交互的操作界面 ;操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。imag...

操作系统:升级Windows 11正式版的四种方法_升级windows11_IT技术分享社区的博客-程序员秘密

距离 Windows 11 预览版测试已经过去近四个半月。终于,在 10 月 5 日,微软的 Windows 11 正式版操作系统全面上市。Win11 的正式上线,打破了微软在 W...

jQuery事件处理概述_橘猫吃不胖~的博客-程序员秘密

jQuery事件1 概述2 页面载入完毕响应事件2.1 window.onload2.2 $(document).ready()事件3 绑定与反绑定事件监听器3.1 概述3.2 绑定事件3.3 jQuery事件处理函数的好处3.4 反绑定事件3.5 一次性的事件绑定4 事件触发器4.1 trigger触发事件4.2 triggerHandler触发事件4.3 Event Helpers快捷事件5 事件的交互处理5.1 hover:模仿鼠标悬停6 事件对象6.1 使用jQuery事件对象6.2 Javascr

Effective C++ 条款 39、40、41_in turns of_coolwriter的博客-程序员秘密

条款三十九:明智而审慎地使用private继承private继承的意义在于“be implemented in turns of”,这个与上一条款中说的复合模型的第二层含义是相同的,这也意味着通常我们可以在这两种设计方法之间转换,但书上还是更提倡使用复合来进行类的设计。private继承与public的继承是完全不同的,主要体现在两个地方:其一,public继承在子类中保持父类的访问权...

ASP.NET MVC流程解说_weixin_30896511的博客-程序员秘密

开始想这个标题时,,很忧郁什么标题将得到更好的叫什么,最后确定的解释,虽然稍0基金会,但是,这个概念是非常。我想出了一个相当的价格值的。,開始。1、MVC的基本开发流程2、webform和MVC的选择3、MVC的内部过程1、MVC的开发流程MVC的出现时微软在2009年左右開始提出的站点开发的新的发展方...

Android的classloader_activity获取classloader_过儿丶的博客-程序员秘密

先做一个demo,代码如下public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.v("wanbai"

推荐文章

热门文章

相关标签