内核中的红黑树没有受到保护?

Hua*_*Jie 5 linux red-black-tree linux-kernel

在Linux内核中,为了存储进程的内存区域,Linux使用链表和红黑树.find_vma是一个函数,它定位第一个存储区域,其vm_end字段大于通过红黑树传递的地址.但是,我发现find_vma()中的红黑树没有保护(如锁).如果另一个线程调用rb_erase函数同时删除树上的某个元素怎么办?

ans*_*arg 2

是的,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.
Run Code Online (Sandbox Code Playgroud)