全部博文(57)
分类: 嵌入式
2010-08-07 09:37:51
自旋锁与信号量的抉择方式:
1、当锁不能获取时,使用信号量的开销是进程上下文切换时间Tsw,使用自旋锁的开销是等待获取自旋锁的时间Tcs(由临界区的执行时间决定),如果Tcs比较小,则应使用自旋锁,若Tcs很大,则应使用信号量;
2、信号量所保护的临界区可包含可能引起阻塞的代码,而自旋锁则绝对要避免这种代码。因为阻塞意味着要进行上下文切换,如果进程被切换出去后,改进程将无法释放锁,在另一个进程试图获取自旋锁时,死锁就会发生。
3、信号量存在于进程上下文,因此,如果共享资源需要在中断或软中断情况下使用,则在信号量和自旋锁之间应该选择自旋锁。如果一定要是用信号量,则只能通过down_trylock()方式进行,不能获取便立即返回以避免阻塞。