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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With