如果我们让一个线程通过down_read(¤t->mm->mmap_sem)
函数保存信号量,它提供对mmap
(vma区域列表)的只读访问权限,因此其他线程无法更改{{1不再了。我正在阅读源代码,但仍然对mmap
如何实现这一点感到困惑。
答案 0 :(得分:2)
基本思路是: free lock = 0
down_read()为每个读者递减锁定... -1(仅当它是< = 0时)
up_read()增加锁定...当1个阅读器完成阅读时+1;
down_write()将lock增加到1 ...只有当它为0时才自由
up_write()减少回0