在Linux内核中,为了存储进程的内存区域,Linux同时使用链表和红黑树。 find_vma是用于查找第一个内存区域的函数,该内存区域的vm_end字段大于通过红黑树传递的地址。但是,我发现它对find_vma()内的红黑树没有任何保护(如锁)。如果另一个线程调用rb_erase函数同时删除树上的某些元素怎么办?
最佳答案
是的,可以防止find_vma函数调用通过信号灯并发访问。
在调度程序中,函数还与信号量调用一起使用。
2209 down_read(&mm->mmap_sem);
2210 vma = find_vma(mm, start);
....
up_read(&mm->mmap_sem);
mmap_sem is used to protect this function call which is a read-write semaphore.
struct rw_semaphore mmap_sem; defined inside struct mm_struct.
关于linux - 内核中的红黑树不 protected 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33954040/