c++ - x64 linux, c++ 线程内存分配 : must i use mutex lock?

标签 c++ memory-management mutex

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

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

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

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/

相关文章:

c - 带互斥量的 Linux 线程

c++ - 使用后序遍历递归的深度优先搜索会产生意外的输出

c# - 将数据从 C++ 传递到 C#

c编程结构指针的动态分配

c++ - 在 CUDA 中混合自定义内存管理和 Thrust

c++ - 递归和非递归锁 (Mutex)

mutex - 如何使方法不需要锁定互斥锁的可变自身?

c++ - 如何从 C++ 程序中的容器类中删除第一个元素?

c++ - boost.variant派生类型: cannot use copy constructor

arrays - 在 Matlab 中存储固定大小和数据类型的多个图像的所有可能且内存有效的方法是什么?