消除警告"construction of local static object is not thread-safe"

Eliminate warning "construction of local static object is not thread-safe"

本文关键字:is object not thread-safe static of 警告 construction local      更新时间:2023-10-16

我有以下类:

struct globalAllocated 
{
    void operator delete(void*p)
    {
        static HANDLE heap= GetHeap();
        ::HeapFree(heap, 0, p);
    }
}

警告 C4640:"堆":本地静态对象的构造不是线程安全的

我想过使用一些与互斥锁的同步,但这似乎很昂贵。

使堆成为私有成员是行不通的,因为运算符删除覆盖必须是静态的,所以堆必须是私有的 - 但是如果我将其声明为静态类成员,我就没有地方可以初始化它。

最好的解决方案是什么?

如果您可以使用 C++11,则需要在那里是线程安全的。 (但是,如果您担心性能问题,也可以通过使用互斥锁轻松实现。

更一般地说:尝试确保在启动多个线程之前调用该函数。 (在许多应用程序中,所需要的只是在静态对象的初始化中的某个位置调用它。