down_read(信号量)如何在内核中工作?

时间:2015-10-11 16:19:54

标签: linux-kernel kernel semaphore

如果我们让一个线程通过down_read(&current->mm->mmap_sem)函数保存信号量,它提供对mmap(vma区域列表)的只读访问权限,因此其他线程无法更改{{1不再了。我正在阅读源代码,但仍然对mmap如何实现这一点感到困惑。

1 个答案:

答案 0 :(得分:2)

基本思路是: free lock = 0

down_read()为每个读者递减锁定... -1(仅当它是< = 0时)

up_read()增加锁定...当1个阅读器完成阅读时+1;

down_write()将lock增加到1 ...只有当它为0时才自由

up_write()减少回0