问题:如果我在线程中使用互斥锁,分配会显着减慢,但是我得到了正确的分配,因此 - 正确的数据结构。
如果我不使用互斥锁,我可以在线程中更快地完成分配工作,但是会损坏数据结构。
这与我之前的帖子密切相关,该帖子也有完全正常工作的代码(使用互斥锁的方式不当)。
c++ linked list missing nodes after allocation in multiple threads, on x64 linux; why?
我尝试了三种不同的分配器,如果我使用互斥锁,它们似乎都会变慢,如果我不这样做,数据结构就会被破坏。有什么建议 ?
答案 0 :(得分:2)
如果多个线程使用公共数据结构,例如某种内存池,并且至少有一个线程修改了数据结构,则需要某种形式的同步。同步是基于原子,互斥或其他原语是单独的问题。
标准库(operator new()
和malloc()
及其各自系列的其他成员)提供的内存分配机制是线程安全的,您无需进行任何其他同步。如果你需要在自己创建的多个线程之间共享的资源中使用内存分配,那么即使它变得更慢,你也必须进行同步。