Linux内核中的自旋锁
自旋锁不会引起睡眠,当一个进程在访问内核无法获取自旋锁时,会进入忙循环,一直等待下去。
实例:
Pcilynx.c (\linux-2.6.30.4\drivers\ieee1394)
1 声明
struct ti_lynx {
int id; /* sequential card number */
spinlock_t lock;
...
};
struct ti_lynx *lynx;
2 初始化
spin_lock_init(&lynx->lock);
3 使用
在函数 static pcl_t alloc_pcl(struct ti_lynx *lynx) 中
用于对临界资源的保护 critical section code
static pcl_t alloc_pcl(struct ti_lynx *lynx)
{
u8 m;
int i, j;
spin_lock(&lynx->lock); //获取锁
/* FIXME - use ffz() to make this readable */
for (i = 0; i < (LOCALRAM_SIZE / 1024); i++) {
m = lynx->pcl_bmap[i];
for (j = 0; j < 8; j++) {
if (m & 1<<j) {
continue;
}
m |= 1<<j;
lynx->pcl_bmap[i] = m;
spin_unlock(&lynx->lock); //释放锁
return 8 * i + j;
}
}
spin_unlock(&lynx->lock);//获取锁
return -1;
}
另外一个用法
spin_try_lock(&lynx->lock) //获取锁,如果获取返回true,否则返回false
以上是 Linux内核中的自旋锁 的全部内容, 来源链接: utcz.com/z/510091.html