精华内容
下载资源
问答
  • 信号量和互斥信号量的理解

    千次阅读 2019-04-09 08:26:11
    信号量和互斥信号量的记住理解应用是不一样的哦,面试常问。 做下本人理解参考他人后的笔记 对于互斥锁(Mutex)来说,只要有线程占有了该资源,那么不好意思,其他线程就是优先级再高,您也得等着,等我用完...

    信号量和互斥信号量的记住和理解应用是不一样的哦,面试常问。
    做下本人理解和参考他人后的笔记

    对于互斥锁(Mutex)来说,只要有线程占有了该资源,那么不好意思,其他线程就是优先级再高,您也得等着,等我用完再说。我用完之后资源你们爱怎么抢都行,我占有资源的时候别人都不许抢,申请该资源的线程一律等待。

    信号量(Semaphore)就更灵活一点,我们如果想把我用完的资源给我关系好的人,就申请一个信号量,这个信号量只有我们几个知道,我用完资源就偷偷通知关系好的这几个,这几个哥们再有序申请资源,别的人干瞪眼。

    互斥锁

    1.用不好造成死锁,死锁是A、B两个线程,A需要获得B线程中释放的锁,可以进行。B需要获得A线程中释放的锁,即A不释放B需要的,B就不会释放A需要的,二者僵持,互相锁喉。
    2.互斥锁(Mutex)保证了使用资源线程的唯一性和排他性,但是无法限制资源释放后其他线程申请的顺序问题,所以是无序的。
    3.通常一个线程采取一个互斥锁,当有数据需要写入的时候就上锁,写入完成立即释放锁。就是一个临界区代码保护
    4.互斥锁必须是一个线程中加锁和释放不允许,多线程

    信号量

    1.通常采取二值信号量。其他不常用不记。信号量是由单个线程释放,另一个线程获取,保证线程同步。

    特别注意:互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到

    互斥锁是代码临界区保护
    信号量是通知

    展开全文
  • 详解信号量互斥锁之间的区别和联系

    万次阅读 多人点赞 2018-08-08 20:50:55
    这是互斥和信号量的根本区别,也就是互斥和同步之间的区别。 (2):互斥量值只能为0/1,信号量值可以为非负整数。 也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。 信号...

    一:信号量与互斥锁之间的区别:

    (1):互斥量用于线程的互斥,信号线用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

    (2):互斥量值只能为0/1,信号量值可以为非负整数。

    也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。

    信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。信号量是通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。

    计数器计算的结果是允许访问共享资源的通行证。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当此线程不再需要访问共享资源时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。

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

     

    二:互斥和同步的定义

    互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

    同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

     

    三:深入解剖互斥量和信号量

    互斥量(Mutex):
    Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥。Mutex对象的值,只有0和1两个值。这两个值也分别代表了Mutex的两种状态。值为0, 表示锁定状态,当前对象被锁定,用户进程/线程如果试图Lock临界资源,则进入排队等待;值为1,表示空闲状态,当前对象为空闲,用户进程/线程可以Lock临界资源,之后Mutex值减1变为0。

    Mutex可以被抽象为四个操作:

    • 创建 Create

    • 加锁 Lock

    • 解锁 Unlock

    • 销毁 Destroy

    信号量:

    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

    Semaphore可以被抽象为五个操作:

    创建 (CreateSemaphore / sem_init)

    等待    (WaitForSingleObject / sem _wait)

    释放 (ReleaseMutex / sem _post)

    试图等待 (WaitForSingleObject / sem _trywait)

    销毁 (CloseHandle / sem_destroy)

     

    展开全文
  • 本文章是关于信号量互斥自旋锁的区别
  • 互斥信号量的初值一般设为1 2、用途 (1)同步信号量的用途:防止被抢占 初始为空 低优先级的任务持有信号量,高优先级的任务需要这个信号量,只有当低优先级的任务give(释放)信号量,高优先级的任务才能take...

    1、初值
    同步信号量的初值一般设为0;
    互斥信号量的初值一般设为1

    2、用途
    (1)同步信号量的用途:防止被抢占 初始为空
    低优先级的任务持有信号量,高优先级的任务需要这个信号量,只有当低优先级的任务give(释放)信号量,高优先级的任务才能take(获取)信号量。通过这种机制低优先级的任务就可以防止被高优先级的任务抢占。give和take是分别在两个任务里做的。

    (2)互斥信号量的用途:对临界区上锁 初始为满
    当一个任务想对临界区访问时,为了防止别的任务也对该临界区操作,它需要对该临界区上锁,即take(获取)一个互斥的信号量,以保证独享。当该任务take(获取)一个互斥的信号量以后,它仍然能被高优先级的任务抢占,但高优先级的用户仍然无法访问它已经上锁的临界区。而解锁也是由上锁的任务来做的。take和give是在一个任务里完成的。

    3、值的含义
    (1)同步信号量,值为资源可以使用的个数,信号量小于0,则线程进行等待,信号量大于0,表示可用资源个数。初始值0.
    (2)互斥信号量只有两个值0或1,0表示资源正在被占用,线程等待。1表示,资源没有被使用,线程可以进入。初始值为1

    展开全文
  • 二值信号量和互斥信号量区别

    千次阅读 2014-06-30 16:00:23
    互斥信号量和二进制信号量的区别   互斥型信号量必须是同一个任务申请,同一个任务释放,其他任务释放无效。同一个任务可以递归申请。    二进制信号量,一个任务申请成功后,可以由另一个任务释放。  ...

    URL: http://blog.csdn.net/cute810326/article/details/4535612

    互斥信号量和二进制信号量的区别

          

    互斥型信号量必须是同一个任务申请,同一个任务释放,其他任务释放无效。同一个任务可以递归申请。

     

           二进制信号量,一个任务申请成功后,可以由另一个任务释放。

     

    二进制信号量实现任务互斥:

         打印机资源只有一个,abc三个任务共享,当a取得使用权后,为了防止其他任务错误地释放了信号量(),必须将打印机房的门关起来(进入临界段),用完后,释放信号量,再把门打开(出临界段),其他任务再进去打印。(而互斥型信号量由于必须由取得信号量的那个任务释放,故不会出现其他任务错误地释放了信号量的情况出现,故不需要有临界段。互斥型信号量是二进制信号量的子集。)

     

    二进制信号量实现任务同步:

         a任务一直等待信号量,b任务定时释放信号量,完成同步功能

     

    理解互斥量和信号量 作者: JuKevin

    互斥量(Mutex)

           互斥量表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源。

           Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥。Mutex对象的值,只有0和1两个值。这两个值也分别代表了Mutex的两种状态。值为0, 表示锁定状态,当前对象被锁定,用户进程/线程如果试图Lock临界资源,则进入排队等待;值为1,表示空闲状态,当前对象为空闲,用户进程/线程可以Lock临界资源,之后Mutex值减1变为0。Mutex可以被抽象为四个操作: - 创建 Create

     

    - 加锁 Lock

     

    - 解锁 Unlock

     

    - 销毁 Destroy

     

    Mutex被创建时可以有初始值,表示Mutex被创建后,是锁定状态还是空闲状态。在同一个线程中,为了防止死锁,系统不允许连续两次对Mutex加锁(系统一般会在第二次调用立刻返回)。也就是说,加锁和解锁这两个对应的操作,需要在同一个线程中完成。

     

    不同操作系统中提供的Mutex函数: 动作/系统

    Win32

    Linyx

    Solaris

     

    创建

    CreateMutex

    pthread_mutex_init

    mutex_init

     

    加锁

    WaitForSingleObject

    pthread_mutex_lock

    mutex_lock

     

    解锁

    ReleaseMutex

    pthread_mutex_unlock

    mutex_unlock

     

    销毁

    CloseHandle

    pthread_mutex_destroy

    mutex_destroy

     

     

    信号量

     

    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程,以保证它们能够正确、合理的使用公共资源。

     

    信号量可以分为几类:

     

    二进制信号量(binary semaphore):

           只允许信号量取0或1值,其同时只能被一个线程获取。

     

    整型信号量(integer semaphore)

           信号量取值是整数,它可以被多个线程同时获得,直到信号量的值变为0。

     

    记录型信号量(record semaphore)

           每个信号量s除一个整数值value(计数)外,还有一个等待队列List,其中是阻塞在该信号量的各个线程的标识。当信号量被释放一个,值被加一后,系统自动从等待队列中唤醒一个等待中的线程,让其获得信号量,同时信号量再减一。

     

           信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。

    计数器计算的结果是允许访问共享资源的通行证。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当此线程不再需要访问共享资源时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。

     

     

    Semaphore可以被抽象为五个操作:

    - 创建 Create

     

    - 等待 Wait:

     

    线程等待信号量,如果值大于0,则获得,值减一;如果只等于0,则一直线程进入睡眠状态,知道信号量值大于0或者超时。

     

    -释放 Post

     

    执行释放信号量,则值加一;如果此时有正在等待的线程,则唤醒该线程。

     

    -试图等待 TryWait

     

    如果调用TryWait,线程并不真正的去获得信号量,还是检查信号量是否能够被获得,如果信号量值大于0,则TryWait返回成功;否则返回失败。

     

    -销毁 Destroy

     

    信号量,是可以用来保护两个或多个关键代码段,这些关键代码段不能并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。如果关键代码段中没有任何线程,那么线程会立即进入该框图中的那个部分。一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量。 动作/系统

    Win32

    POSIX

     

    创建

    CreateSemaphore

    sem_init

     

    等待

    WaitForSingleObject

    sem _wait

     

    释放

    ReleaseMutex

    sem _post

     

    试图等待

    WaitForSingleObject

    sem _trywait

     

    销毁

    CloseHandle

    sem_destroy

     

     

     

    互斥量和信号量的区别

     

    1. 互斥量用于线程的互斥,信号量用于线程的同步。 ——

           这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

    2.互斥量无法保证线程对资源的有序访问,信号量可以。

     

    互斥

           是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。(cute:好比一个别墅,同时只能卖个一个人。这个人可以在门上加上任意多的锁(申请多次),但是锁必须由这个人打开,因为只有他掌握着钥匙。如果别的人真的想控制这个别墅的大门,则它首先应该把这个别墅买下来(别墅的主人放弃所有权))

     

    同步

           是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源 (cute:相当于图书馆阅览室的书卡,你申请的时候-1,另一个人还的时候则可以+1,我们都可以修改书卡的当前可用数目,这个权利是不独属于任何人的。)

     

    3. 互斥量值只能为0/1,信号量值可以为非负整数。

     

           也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。

     

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


    展开全文
  • 这是互斥和信号量的根本区别,也就是互斥和同步之间的区别互斥量值只能为0/1,信号量值可以为非负整数。 也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。 信号量...
  • 信号量互斥量(锁)的区别 一、概念定义 信号量:多线程同步使用的;一个线程完成某个动作后通过信号告诉别的线程,别的线程才可以执行某些动作; 互斥量:多线程互斥使用的;一个线程占用某个资源,那么别...
  • 主要介绍了c# 信号量和互斥体的相关资料,文中讲解非常细致,示例代码帮助大家更好的理解学习,感兴趣的朋友可以了解下
  • 二进制信号量和互斥量之间是否有任何区别,或者它们基本相同?
  • 第16讲 UCOSIII信号量和互斥信号量(下)ppt,ALIENTEK UCOS学习视频(课件)
  • 第15讲 UCOSIII信号量和互斥信号量(上)ppt,ALIENTEK UCOS学习视频(课件)
  • 信号量和互斥量的区别 概念上的区别:  信号量:是进程间(线程间)同步用的,一个进程(线程)完成了某一个动作就通过信号量告诉别的进程(线程),别的进程(线程)再进行某些动作。有二值...
  • 互斥信号量作用:任务通过OSMutexPend()函数获得互斥信号量,如果互斥信号有效(不为0)则继续运行,否则进入等待。 那么他们之间区别在哪? 假设有三个任务A,B,C,他们的优先级分别为10、20、30,而任务AC共同...
  • 为了解决这个问题,引出了互斥信号量的概念。 1:信号量   信号量是一种上锁机制,该任务必须获得相应的钥匙才能进入,直至代码执行结束,释放钥匙,程序才退出。信号量分两种,一种是二进制信号量,一种是计数型
  • UCOSIII信号量和互斥信号量

    千次阅读 2016-08-08 10:58:12
    在可剥夺的内核中,当任务独占式使用共享资源的时候,会低优的任务高于高级优先任务运行的现象,这个现象叫做优先级反转,未来了解决这个优先级反转的问题,UCOSIII引入可互斥信号量这个概念。信号量 信号量像是一种...
  • linux内核信号量和互斥锁使用

    千次阅读 2019-09-01 11:29:08
    Linux 内核的信号量在概念原理上与用户态的 System V 的 IPC 机制信号量是一样的,但是它绝不可能在内核之外使用,因此它与 System V 的 IPC 机制信号量毫不相干。 信号量在创建时需要设置一个初始值,表示同时...
  • 二元信号量类似,资源仅同时允许一个线程访问,但和信号量不同的是,信号量在整个系统可以被任意线程获取并释放,也就是说,同一个信号量可以被系统中的一个线程获取之后由另一个线程释放。而互斥量则要求哪个线程...
  • OPENRTOS and SAFERTOS contain a Task Notifcation feature that can be used as a faster and lighter weight binary semaphore alternative in some situations. There is often ambiguity around semaphores and...
  • 原文链接:https://www.cnblogs.com/codescrew/p/8970514.html在说明之前我先抛出结论:互斥二值信号量在使用上非常相似,但是互斥锁解决了优先级翻转的问题假定我们现在有三个任务,task1,task2,task3,任务...
  • VxWorks的信号量机制分析   VxWorks信号量是提供任务间通信、同步互斥的最优...互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全递归等情况而最优化的特殊的二进制信号量。 计数信号量:类似于二进制
  • 11、UCOSIII信号量和互斥信号量

    千次阅读 2018-08-30 15:14:40
    1、 信号量 1.1 信号量简介 ①信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被锁部分代码的权限。一旦执行至被锁代码段,则任务一直等待,直到对应被...
  • 信号量:那是多线程同步用的,一个线程完成了某一个动作就通过信号告诉别的...信号量与普通整型变量的区别信号量(semaphore)是非负整型变量,除了初始化之外,它只能通过两个标准原子操作:wait(semap), sign...
  • 使用Linux线程信号量和互斥量实现读者写者问题。要求:要求:①允许多个读者可以同时对文件执行读操作;②只允许一个写者往文件中写信息;③任一写者在完成写操作之前不允许其他读者或写者工作;④写者执行写操作前...
  • 信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。...有的时候锁和信号量会同时使用的” 也就是说,信号...
  • 本章节讲解 FreeRTOS 任务间的同步资源共享机制...FreeRTOS 分别提供了二值信号量和计数信号量,其中二值信号量可以理解成计数信号量的一种特殊形式,即初始化为仅有一个资源可以使用,只不过 FreeRTOS 对这两种都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,466
精华内容 35,786
关键字:

信号量和互斥信号量的区别