【问题标题】:Override method in multiple threads在多个线程中覆盖方法
【发布时间】: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


【解决方案1】:

线程本地存储可以工作。

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2015-07-09
    • 2019-01-02
    • 2018-03-14
    相关资源
    最近更新 更多