C++ 原子数组是否也需要是原子的?

C++ Does an array of atomics also need to be atomic?

我有一些代码如下:

KMessageQueue::KMessageQueue()
{    
    messages = new atomic<KBuffer*>[MAX_MESSAGES];
    for (int i = 0; i < MAX_MESSAGES; i++)
        messages[i].store(nullptr);
}

其中messages是KMessageQueue的成员,定义为:

std::atomic<KBuffer*>* messages;

所以消息数组中的每个元素都是原子的,我从另一个线程读取它们。 但是数组指针本身也需要是原子的吗?另一个线程会不会在构造函数完成后尝试访问消息,却发现消息还没有被赋值?

But does the array pointer itself also need to be atomic?

一般来说,这取决于不同线程如何使用该指针。如果一个线程可能会在其他线程读取时修改它,那么是的。在您的情况下,不,您不需要它。假设你的程序是正确的(否则答案没有任何意义)你不能使用你的 class 的实例,直到它被完全构建,即构造函数完成。

Could another thread try to access a message after the constructor completes, only to discover that messages hasn't been assigned a value yet?

您的工作是让 class 在完全初始化之前无法被多个线程访问。之后应该就好了。