Linux中的同步技术(一)

同步和互斥:

所谓互斥,是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。

Linux中的同步技术包括:

技术\作用

互斥

同步

中断屏蔽

 

原子操作

 

自旋锁

 

信号量

completion

 

互斥灯(mutex)

 

自旋锁与信号量

从严格意义上说,信号量和自旋锁属于不同层次的互斥手段,前者的实现依赖于后者。

自旋锁和信号量选用的3项原则:
1)当锁不能被获取时,使用信号量的开销是进程上下文切换时间Tsw,使用自旋锁的开销是等待获取自旋锁(由临界区执行时间决定)Tcs,若Tcs比较小,应使用自旋锁;若Tcs很大,应使用信号量。
2)信号量所保护的临界区可以包含可能引起阻塞的代码,而自旋锁则绝对要避免用来保护包含这样代码的临界区。因为阻塞意味着要进行进程的切换,如果进程被切换出去后,另一个进程企图获取本自旋锁,死锁就可能发生。
3)信号量存在于进程上下文,因此,如果被保护的共享资源需要在中断或软中断情况下使用,则在信号量和自旋锁之间只能选择自旋锁。当然,如果一定要使用信号量,则只能通过down_trylock()方式进行,不能获取就立即返回且不执行临界区代码,以避免阻塞。

信号量和complete

信号量和complete都可以用于同步,complete可算是对信号量用于同步的一种优化。

信号量和互斥灯mutex

信号量和互斥灯都可以用于互斥,信号量中也有专门用于初始化信号量来用作互斥的宏定义,但是在高版本中好像被移除了,所以要使用信号量实现互斥,现在得自己实现原来的宏定义。

转载于:https://my.oschina.net/wuqingyi/blog/835549

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值