迷彩 潜伏 隐蔽 伪装
分类:
2012-11-07 21:14:51
原文地址:LINUX 内核中并发机制 作者:ispsubb
在宏观上并行或者真正意义上的并行,可能会导致竞争。类似两条十字交叉的道路上运行的车。当他们同一时刻要经过共同的资源(交叉点)的时候,如果没有交通信号灯,就可能出现混乱。在linux 系统中也有可能存在这种情况。以内核态来说,UP(单CPU),SMP(多CPU), 。如下图,可能出现下面的几种组合。这里面几种组合就可能出现并发导致的竞争。当然linux 系统中也有类似交通信号灯一样的措施来避免这种竞争。主要有[……。对于我自己来说,原子操作,信号量,自旋锁这三种可能用得比较多。那么这三种有什么相同的地方,有什么区别呢?适用什么不同的场合呢?会带来什么边际效应?阅读以及查看一些资料后,要彻底弄清楚这些问题,要从其所处的环境来进行细化分类处理。是UP(单CPU)还是SMP(多CPU);是抢占式内核还是非抢占式内核;是在中断上下文不是进程上下文。
三种并发机制的简单概念。
原子锁:原子操作不可能被其他的任务给调开,一切(包括中断),针对单个变量。
自旋锁:使用忙等待锁来确保互斥锁的一种特别方法,针对是临界区。
信号量:包括一个变量及对它进行的两个原语操作,此变量就称之为信号量,针对是临界区。
几点区别:
信号量是会产生睡眠,自旋锁是忙等待.
信号量还可以出现在用户进程中,自旋锁只能在内核线程中使用.
信号量只能出现在进程上下文,而自旋锁则还可以出现在中断上下文。
信号量是进程级的(内核是代表进程来争夺资源的),自旋锁主要是用于CPU同步的.
信号量保持期间是可以被抢占的,自旋锁保持期间抢占是失效的.
从以上的区别以及本身的定义可以推导出两都分别适应的场合。只考虑内核态。
根据自旋锁与信号量适应的场合,结合不同软硬件环境可以整理出,如下内核并发出现的情况。