zeronet网站开发,舆情监测软件有哪些,建筑设计公司账务处理实例,移动卡套餐内核线程与读写自旋锁 文章目录 内核线程与读写自旋锁1、读写自旋锁介绍2、Linux内核中的读写自旋锁2.1 初始化2.1.1 静态方法2.1.2 动态方法3、读写自旋锁加锁与解锁3.1 在用户上下文之间锁定3.1.1 读锁3.1.2 写锁3.2 下半部分之间的锁定3.3 在用户上下文和下半部分之间锁定3.…内核线程与读写自旋锁 文章目录 内核线程与读写自旋锁1、读写自旋锁介绍2、Linux内核中的读写自旋锁2.1 初始化2.1.1 静态方法2.1.2 动态方法 3、读写自旋锁加锁与解锁3.1 在用户上下文之间锁定3.1.1 读锁3.1.2 写锁 3.2 下半部分之间的锁定3.3 在用户上下文和下半部分之间锁定3.3.1 读锁3.3.2 写锁 3.4 在硬中断和下半部分之间锁定3.4.1 读锁3.4.2 写锁 4、驱动示例5、驱动验证 在前面的文章
内核线程与自旋锁中,详细介绍了如何在Linux内核线程中使用通用自旋锁,本文将详细进一步介绍自旋锁,即读写自旋锁(Read Write Spinlock)。 1、读写自旋锁介绍
自旋锁是一个非常简单的单持锁。 如果进程试图获取自旋锁但它不可用,则该进程将继续尝试(自旋)直到它可以获取锁。 Read Write 自旋锁也做同样的事情,但它有单独的锁用于读取和写入操作。
自旋锁与读写自旋锁在操作中相似,那么在什么样场景中需要使用读写自旋锁呢?下面假设这样的一个场景:
假如有五个线程, 所有这些线程都在访问一个全局变量。 在这些线程中,Thread 1 的作用是将数据写入该变量。 其他四个线程的角色只是从该变量中读取数据。 在这个场景中, 另外四个线程(Thread 2-Thread 5)都想同时从变量中读取数据。如果使用自旋锁,在这种情况下会发生什么? 处理速度和性能如何?
假设Thread 2 获得了锁,而其他读取线程正在努力获取锁。 该变量甚至不会改变Thread 2 的访问权限。 因为