信号量、互斥量、临界区

二元信号量只有两种状态:占用与非占用。它适合只能被唯一一个线程独占访问的资源。

多元信号量(Semaphore):适用于允许多个线程并发访问的资源。

信号量可以用于互斥和同步

互斥量(Mutex):和二元信号量很类似,资源仅同时允许一个线程访问,但和信号量不同的是,信号量可以在整个系统可以被任意线程获取并释放。也就是说,同一个信号量可以被系统中的一个线程获取之后由另一个线程释放。而互斥量则要求哪个线程获取了互斥量,哪个线程就要释放它,其他线程去释放是无效的。

临界区:是比互斥量更加严格的同步手段。进入临界区和离开临界区。临界区和互斥量与信号量的区别是:互斥量和信号量在系统的任何进程都是可见的,也就是说,一个进程创建了一个互斥量或者信号量,另一个进程去获取该锁是合法的。然而,临界区的作用范围仅限于本进程,其他进程是无法获得该锁的。

 

Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。

 

Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。

 

Binary semaphore与Mutex的差异:

在有的系统中Binary semaphore与Mutex是没有差异的。在有的系统上,主要的差异是mutex一定要由获得锁的进程来释放。而semaphore可以由其它进程释放(这时的semaphore实际就是个原子的变量,大家可以加或减),因此semaphore可以用于进程间同步。Semaphore的同步功能是所有系统都支持的,而Mutex能否由其他进程释放则未定,因此建议mutex只用于保护critical section。而semaphore则用于保护某变量,或者同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值