Reputation: 1530
If we let a thread hold a semaphore by down_read(¤t->mm->mmap_sem)
function, it provides the read-only access to mmap
(list of vma areas), so other threads are not able to change mmap
anymore. I'm reading the source code, but still confused about how down_read
achieves that.
Upvotes: 4
Views: 6034
Reputation: 31
The basic idea is: free lock = 0
down_read() decrements lock ... -1 for each reader (only if it's <= 0)
up_read() increments lock ... +1 when 1 reader finished reading
down_write() increments lock to 1 ... only if it's 0 -- free
up_write() decrements back to 0
Upvotes: 3