【发布时间】:2012-07-06 04:37:08
【问题描述】:
我已经实现了自己的内存管理器,并像这样覆盖 new 和 delete 运算符:
/** Override the Standard C++ new operator */
void* operator new (size_t size);
/** Override the Standard C++ delete operator */
void operator delete (void *p);
这没问题,但现在我正在一个多线程环境中进行开发,并且有很多堆分配。为了避免堆争用,我希望每个线程都有自己的内存管理器实例。如何使运算符覆盖指向该线程的内存管理器实例?
【问题讨论】:
-
听起来像线程本地存储可以工作。或者你可以有一个从线程 ID 到内存管理器实例的线程安全映射。
-
您使用的是哪个操作系统?视窗? Linux?还有什么?
-
@IvanShcherbakov Windows、UNIX 和 Linux。
-
那就很棘手了。您需要 TLS(线程本地存储机制)。它不是由 C++ 语言提供的,而是由操作系统实现的。因此,您将需要一个单独的 Windows 实现和一个单独的 Linux 实现。或者,您可以使用像 boost 这样的库来抽象出那些特定于操作系统的 API。
标签: c++ multithreading