问题:如果我在线程中使用互斥锁,分配会显着减慢,但我得到了正确的分配,因此 - 正确的数据结构。
如果我不使用互斥锁,我可以在线程中更快地完成分配工作,但会损坏数据结构。
这与我之前的帖子密切相关,该帖子也有完整的工作代码(不正确使用互斥锁)。
c++ linked list missing nodes after allocation in multiple threads, on x64 linux; why?
我尝试了三种不同的分配器,如果我使用互斥锁,它们似乎都会变慢,如果我不使用,数据结构就会损坏。有什么建议 ?
最佳答案
如果多个线程使用共同的数据结构,例如某种内存池,并且至少有一个线程修改数据结构,则需要某种形式的同步。同步是基于原子、互斥锁还是其他原语是单独的问题。
标准库提供的内存分配机制(operator new()
和 malloc()
以及它们各自系列的其他成员)是线程安全的,您不需要做任何额外的同步。如果您需要使用您自己创建的多个线程之间共享的资源的内存分配,您将不得不同步,即使它因此变得更慢。
关于c++ - x64 linux, c++ 线程内存分配 : must i use mutex lock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919911/