HuangJie
HuangJie

Reputation: 1530

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.

Upvotes: 4

Views: 6034

Answers (1)

Vratislav Bendel
Vratislav Bendel

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

Related Questions