读写锁
读者和写者问题是一个常见的同步问题。尤其在操作系统和驱动中经常有这种问题。中断处理程序改写数据,用户进程读取数据就是这种情况。这种情况简单来说就是,可以同时读,但不能同时写,也不能读和写同时进行。
内核实现了读写锁来处理这种情况。
当然,这些函数还有对应的屏蔽中断版。如下
上面的读写锁使得读者进程和写者进程拥有相同的优先级,有时可能需要写者拥有更高优先级,这样每个读者都能得到最新的数据。内核对于这种情况提供了一个seqlock。
由于写者进入临界区时,可能还有读者正在读取数据,所以读者在读取数据后需要验证数据是否被写者改变。