内核线程与Seqlock
文章目录
- 内核线程与Seqlock
-
- 1、Seqlock介绍
- 2、Seqlock相关API
-
- 2.1 初始化
- 2.2 写操作
- 2.3 读操作
- 3、驱动实现
- 4、驱动验证
在前面的文章中,我们介绍了 Mutex、Spinlock、Read/Write Spinlock 的使用及其实现。 它们都用于保护共享资源不被两个或多个进程同时修改。当想平等对待写操作和读操作时,那么就必须使用自旋锁。 在某些情况下,我们可能不得不重视读操作,在这种情况下,我们可以使用读写自旋锁。那么,是否有任何机制重视写操作? 答案是肯定的,它在 Linux 中就存在。 Seqlock 重视写操作。 本文将介绍如何在Linux驱动中使用 Seqlock。
1、Seqlock介绍
2.5.60 内核添加了一种称为 Seqlock 的新型锁。 Seqlock 是顺序锁的缩写形式。 它是一种重视写操作的读写器一致性机制。 所以这避免了写操作线程饥饿的问题。Seqlock如何工作?
-
1)当没线程在临界区时,一个写操作线程可以通过获取锁进入临界区。 一旦获得了锁,写入器就会将序列号加一。 此时,序列号是一个奇数。 写入完成后,它会再次将序列号加一。 现在这个数字是一个偶数。 所以,当序号为奇数时,写入就发生了。 当序号为偶数时,写入完成。 临界区中只允许一个写入器线程。 所以其他写操作线程将等待锁。
-
2)当读线程要读取数据时,首先会读取序列