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

时间:2015-11-27 09:20:30

标签: linux linux-kernel red-black-tree

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

1 个答案:

答案 0 :(得分: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.