首页 / LINUX / Linux设备驱动程序 之 顺序锁
Linux设备驱动程序 之 顺序锁
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux设备驱动程序 之 顺序锁,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1333字,纯文字阅读大概需要2分钟。
内容图文
![Linux设备驱动程序 之 顺序锁](/upload/InfoBanner/zyjiaocheng/948/00d54ae09f6644b0841afc4479cccde9.jpg)
当要保护的资源很小,很简单,会频繁的被访问而且写入访问很少的且必须快速时(即读不允许让写饥饿),就可以使用顺序锁(seqlock);从本质上讲,顺序锁会允许读取者对资源的自由访问,但需要读取者检查是否和写入者发生冲突,当这种冲突发生时,就需要重试对资源的访问;
顺序锁通常不能用于保护包含指针的数据结构,因为在写入者修改该数据结构的同时,读取这可能会追随一个无效指针;
seqlock定义在<linux/seqlock>中,通常用于初始化seqlock的方法有:
静态定义和初始化:
1 #define DEFINE_SEQLOCK(x)
动态定义和初始化:
1 seqlock_t x; 2 #define seqlock_init(x)
写锁的使用方式如下,写锁是使用自旋锁实现的:
1 write_seqlock(&x) 2 /* 写数据 */ 3 write_sequnlock(&x);
读取访问通过获得一个无符号整数顺序值进入临界区,在退出时,该顺序值会合当前值进行比较,如果不相等,则必须重试读取访问;读取者代码会如下编写:
1 do { 2 seq = read_seqbegin(&the_lock); 3 /* 需要完成的工作 */ 4 } while read_deqretry(&the_lock, seq);
这种类型的锁通常用于保护某种类型的简单计算,这种计算需要多个一致的值,如果计算结果时发现已经发生并发的修改,则可以简单丢弃结果并重新计算;
如内核中获取jiffies中的使用,如下:
1 u64 get_jiffies_64(void) 2 { 3 unsigned long seq; 4 u64 ret; 5 6 do { 7 seq = read_seqbegin(&jiffies_lock); 8 ret = jiffies_64; 9 } while (read_seqretry(&jiffies_lock, seq)); 10 return ret; 11 }
如果在中断处理程序中使用seqlock,则应该使用IRQ安全的版本;
内容总结
以上是互联网集市为您收集整理的Linux设备驱动程序 之 顺序锁全部内容,希望文章能够帮你解决Linux设备驱动程序 之 顺序锁所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。