我很想知道使用默认的new操作符分配内存是否是非阻塞操作。
例如:
struct Node {
int a,b;
};
..。
Node foo = new Node();
如果多个线程试图创建一个新的节点,如果其中一个线程在分配过程中被操作系统挂起,是否会阻止其他线程取得进展?
我问这个问题的原因是因为我有一个创建新节点的并发数据结构。然后,我修改了算法以回收节点。在24核机器上,这两种算法的吞吐量性能几乎相同。然而,我随后创建了一个在所有系统内核上运行的干扰程序,以便创建尽可能多的操作系统抢占。与回收节点的算法相比,创建新节点的算法的吞吐量性能降低了5倍。
我很好奇为什么会发生这种情况。
谢谢。
*编辑:告诉我linux的c++内存分配器的代码也会很有帮助。我试着在张贴这个问题之前寻找,但很难找到它。
https://stackoverflow.com/questions/4600208
复制相似问题