Linux malloc引起的抢占

Linux malloc引起的抢占,linux,malloc,Linux,Malloc,我正在考虑下面的场景,我想再次与您确认一下 一个Linux进程,两个或多个线程在不同的内核上并行运行。假设它们都以相同的数量调用malloc,这样malloc就不必调用mmap。换句话说,堆足够大,并且(以前)通过其他sbrk调用增加了堆。在这种情况下,内存分配完全在用户空间中。通过查看GitHub,我发现有一个互斥锁保护malloc使用的内部数据结构 我的问题是,如果线程试图获取相同的锁,那么内核能否抢占线程?换句话说,其中一个线程在执行时会受到惩罚,因为另一个线程已经获得了锁 谢谢,互斥锁通

我正在考虑下面的场景,我想再次与您确认一下

一个Linux进程,两个或多个线程在不同的内核上并行运行。假设它们都以相同的数量调用malloc,这样malloc就不必调用mmap。换句话说,堆足够大,并且(以前)通过其他sbrk调用增加了堆。在这种情况下,内存分配完全在用户空间中。通过查看GitHub,我发现有一个互斥锁保护malloc使用的内部数据结构

我的问题是,如果线程试图获取相同的锁,那么内核能否抢占线程?换句话说,其中一个线程在执行时会受到惩罚,因为另一个线程已经获得了锁


谢谢,

互斥锁通常会在线程睡眠前旋转。如果线程B很快完成,在A到达睡眠部分之前,A将获取互斥体,并且不会因为互斥体而受到调度程序的惩罚。有没有办法知道malloc互斥体在达到睡眠部分之前会旋转多少?您知道有任何malloc选项可以做到这一点吗?请阅读pthread库的源代码。Musl旋转100圈。如果您想要更多,那么我想您可以始终在pthread\u mutex\u trylock上循环一点。因此,当malloc mutex完成旋转时,另一个线程可以进入睡眠状态。这意味着另一个线程将由于malloc调用而被抢占。。。对吗?
intspinning_mutex_lock(mutex_t*Mx){for(inti=0;i