实例:
Pcilynx.c (\linux-2.6.30.4\drivers\ieee1394)
struct ti_lynx {
int id; /* sequential card number */
spinlock_t lock;
...
};
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
来源:oschina
链接:https://my.oschina.net/u/4893/blog/70502