首页 > 试题广场 >

请分别描述信号量和互斥锁的异同,并对使用场景进行举例。

[问答题]
请分别描述信号量和互斥锁的异同,并对使用场景进行举例。
1. 互斥量用于线程的互斥,信号线用于线程的同步。 
这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
2. 互斥量值只能为0/1,信号量值可以为非负整数。 
也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。 
3. 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。 


发表于 2018-09-01 21:22:14 回复(1)

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

基于上面的特点,互斥锁一般用于控制一段临界代码,当然信号量也可以做到。但是如果释放和获取不在一个函数中甚至不在一个线程中时就必须使用信号量了


发表于 2018-08-05 09:24:41 回复(0)
信号量的特点:对一个进程加锁,可以不断加锁,设置一个标记a=0,a++.解锁的时候a--,当a==0时可以继续进行,PV信号量操作。
应用场景:生产者-消费者的例子,使用场景:操作系统分配多个打印任务时
互斥锁:当一个进程把持资源时,其他进程不能访问此资源,此特性代表了此资源一次只能被一个进程利用,使用场景:文本的写入

发表于 2019-08-02 20:38:56 回复(0)
信号量最大支持n(n>1)个线程,使用场景就好比独立分工的车间,每个车间能容纳n个工人共享车间,为了避免死锁,车间配有n把钥匙,每个工人进入车间时取走一把钥匙,出去时将钥匙放回。当有其他线程想要进入该车间时,如果有剰余的钥匙,则取走钥匙进入车间,如果没有剩余,则需等待。
互斥锁:支持单个线程,使用场景就好比厕所,厕所很小只能容纳单个人,同样为了防止出现死锁,有人进入厕所时,上锁,当有其他线程想要进入时,需等待,无人时才能进入。
发表于 2020-08-12 16:58:41 回复(0)
看大家的解析基本都是在说应用层面上的,我说说我的理解
我认为这道题考察的是信号量与互斥锁的关系
信号量是一种进程间通信手段,但是与其他IPC不同的是,它本质上是一个计数器,主要用于进程间的互斥与同步,而不是存储进程间通信数据,对信号量的操作主要基于操作系统的PV操作,它们都是原子的,每次PV不局限于对信号量加1或减1,而是可以加减任意整数(不必担心超限,有阻塞机制)。
互斥锁是信号量的一种具体实现,主要用于控制进程对临界区的访问,互斥体现在互斥锁中的信号量只能设置为1,也即仅有一个进程能够访问资源。
具体应用:信号量可以用于控制进程数,互斥锁可以用于并发加锁
发表于 2020-08-01 11:00:47 回复(0)
定义:
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。

区别:
(1) 互斥量用于线程的互斥,信号线用于线程的同步。
(2) 互斥量值只能为0/1,信号量值可以为非负整数。
相同:
Semaphore=1时可以看成互斥锁

应用举例:
Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥。
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。
发表于 2019-03-24 09:25:23 回复(0)
互斥锁(Mutex)保证了使用资源线程的唯一性和排他性,但是无法限制资源释放后其他线程的申请顺序。所以是无序的。
信号量(semaphore)一般是读取互斥的(少数是读取不互斥),保证了线程执行的有序性。
互斥锁必须是单个线程获取和释放的。
信号量是由单个线程释放,另外一个线程获取,保证线程同步。
信号量是互斥锁的进步,当semaphore = 1 的时候,信号量可以看做互斥锁。
信号量的值可以是非负整数,但是互斥锁的值只能是0或1.
使用场景:
加锁,异步返回,控制线程并发数。


https://www.jianshu.com/p/de75da4173cf
发表于 2018-11-30 23:21:09 回复(0)
 
发表于 2018-08-09 20:22:31 回复(1)