spinlock_t

Linux内核中的自旋锁

蓝咒 提交于 2021-02-20 08:57:52
自旋锁不会引起睡眠,当一个进程在访问内核无法获取自旋锁时,会进入忙循环,一直等待下去。 实例: 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