Pro-I、内核同步与自旋锁:
1、为什么要使用内核同步?
同步使得共享数据结构(相对应的代码块—临界区)可以有节奏的被读/写。主要是由于内核控制路径的改变,而且它的改变是随机的。那么我们所要做的就是要保证在任意时刻只有一个内核控制路径处于临界区。如果在单CPU的情况下,只需禁止内核抢占即可实现不会发生内核控制路线的改变,如果在多CPU的情况下,就需要用到自旋锁了,它可以保证多个CPU的运行轨迹同步。当要进入临界区时,一定要得到关于这块临界区的锁,如果已经锁住,说明已经有CPU在了,只有“忙等待”直到那个CPU离开临界区,然后将锁打开,别的CPU才能获得锁而进入临界区。
内核同步的技术很多,我们称为同步原语。
技术 |
说明 |
适用范围 |
每CPU变量 |
在CPU之间复制数据结构 |
ALL CPU |
原子操作 |
对一个计数器原子地“读—修改--写”的指令 |
ALL CPU |
内存屏障 |
避免指令重新排列 |
LOCAL CPU or ALL CPU |
自旋锁 |
加锁时忙等待 |
ALL CPU |
信号量 |
加锁时阻塞等待 |
|