linux自旋锁使设备只能被一个进程打开
引用
int xxx_count = 0; /*定义文件打开次数*/
static int xxx_open (struct inode *inode, struct file *filp)
{
...
spin_lock (&xxx_lock); /*获取自旋锁*/
if (xxx_count){ /*获得自旋锁,但已有别的进程打开设备*/
spin_unlock (&xxx_lock); /*设备忙,释放自旋锁返回*/
reurn (-EBUSY);
}
xxx_count++; /*没有别的进程使用设备,增加使用计数*/
spin_unlock (&xxx_lock); /*已经成功打开设备,释放自旋锁*/
...
return (0); /*打开成功*/
}
static int xxx_release (struct inode *inode, struct file *filp)
{
...
spin_lock (&xxx_lock); /*获得自旋锁*/
xxx_count--; /*减少使用计数*/
spin_unlock (&xxx_lock);
return (0);
}
这是我再看《Linux设备驱动开发详解》自旋锁的使用的时候看到的一个例子,初次接触有很多不明白的地方:
1、自旋锁不是应该在设备打开的时候获取锁,在设备被释放的时候才解除锁吗?这里为什么在open设备之后就解除锁了呢?