x64 linux,c ++线程内存分配:我必须使用互斥锁吗?

时间:2012-10-16 17:05:45

标签: c++ memory-management mutex

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

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

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

c++ linked list missing nodes after allocation in multiple threads, on x64 linux; why?

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

1 个答案:

答案 0 :(得分:2)

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

标准库(operator new()malloc()及其各自系列的其他成员)提供的内存分配机制是线程安全的,您无需进行任何其他同步。如果你需要在自己创建的多个线程之间共享的资源中使用内存分配,那么即使它变得更慢,你也必须进行同步。