我在网上读到,大多数现代的Unix系统默认情况下都带有线程安全的Malloc().我知道这仅仅意味着一个线程可以安全地调用Malloc(),而另一个线程本身已经在调用Malloc().
我正在使用p线程进行我的多线程.我有一个12核的CPU,每个核有2个线程.所以总共有24个线程.另外,我使用的是Malloc的GNU C库实现.
我的问题是如何在不锁定/等待/阻塞的情况下同时执行这些操作.我在回复中看到,当多个线程同时调用Malloc()时,它"使用内部锁定机制".
So here's my question exactly:个
如果8个线程恰好同时调用Malloc(),是否会有8个并行发生的Malloc调用,并且它们不会相互干扰?
或者情况是这样的:当一个线程调用Malloc()时,用于该线程的Malloc调用的其他线程MUST WAIT完成BEFORE,它们可以继续它们自己的Malloc调用?
(我之所以问这个问题,是因为我刚刚对我的一个C程序进行了多线程处理,该程序确实大量使用了Malloc()和Free(),并且加速比与所使用的线程不是线性的,尽管在逻辑上它应该是线性的,因为没有线程依赖于任何全局事务,所以不应该发生争用(无论如何在软件中).我的场景很简单:每个线程调用一个大约需要315秒才能在一个线程上完成的函数(没有多线程),这会对我定义的函数进行数百万次其他调用.由于函数代码是只读的,假设每个线程使用自己的参数调用它,并且没有线程依赖于任何全局或共享的东西,那么并行运行这个顶级函数的X个线程的加速应该不会有问题.当我使用4个线程时,由于某种原因,时间从315秒增加到710秒,而当我使用8个线程时,时间增加到1400秒,even though each thread is doing exactly the same work that the one thread without multithreading was doing, and was taking 315 seconds to complete秒.那么,见鬼的是什么??)