0

问题:如果我在线程中使用互斥锁,分配速度会显着减慢,但我得到了正确的分配,因此 - 正确的数据结构。

如果我不使用互斥锁,我会在线程中更快地完成分配工作,但会损坏数据结构。

这与我之前的帖子密切相关,该帖子也有完整的工作代码(互斥锁使用不当)。

在x64 linux上,在多线程中分配后c ++链表缺少节点;为什么?

我尝试了三种不同的分配器,如果我使用互斥锁,它们似乎都会变慢,如果我不使用,数据结构就会损坏。有什么建议么 ?

4

1 回答 1

2

如果多个线程使用共同的数据结构,例如某种内存池,并且至少有一个线程在修改数据结构,则需要某种形式的同步。同步是基于原子、互斥体还是其他原语是单独的问题。

标准库(operator new()以及malloc()它们各自家族的其他成员)提供的内存分配机制是线程安全的,您不需要进行任何额外的同步。如果您需要从您自己创建的多个线程之间共享的资源中使用内存分配,则即使结果变得更慢,您也必须进行同步。

于 2012-10-16T17:20:30.330 回答