Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does down_read(semaphore) work in kernel?

If we let a thread hold a semaphore by down_read(&current->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.

like image 422
HuangJie Avatar asked Oct 25 '25 15:10

HuangJie


1 Answers

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

like image 96
Vratislav Bendel Avatar answered Oct 27 '25 12:10

Vratislav Bendel