linux自旋锁使设备只能被一个进程打开

qq_35727075 2016-07-28 10:59:28
引用
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设备之后就解除锁了呢?
...全文
679 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zy1306 2016-08-03
  • 打赏
  • 举报
回复
spin_lock 在获取锁的过程中cpu在忙等,只适用于临界资源的保护,期间禁止使用可能引起调度的操作!要想实现设备独占访问,请使用互斥体、信号量等睡眠等待的机制。
qq_35727075 2016-07-28
  • 打赏
  • 举报
回复
实际上自旋锁保护的是xxx_count这个变量,只要将它保护起来了,实际上就保证了互斥访问
Wenxy1 2016-07-28
  • 打赏
  • 举报
回复
如果文件允许多个进程读,那么当然是open后就释放锁。 如果是独占访问文件,那么是close文件时释放锁。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧