此向量模板类型是否需要易变?

时间:2016-06-29 20:14:00

标签: c++ multithreading vector

我在这方面遇到了一些麻烦:

volatile uint32_t chunk_size;
volatile T* chunk;
std::vector<volatile T*>* chunks;
CRITICAL_SECTION cs;

...

void push(T item) {
    EnterCriticalSection(&cs);

    uint32_t slot = chunk_size++;

    if (slot == chunk_capacity) {
        chunk = new T[chunk_capacity];
        chunks->push_back(chunk);
        chunk_size = 1;
        slot = 0;
    }

    chunk[slot] = item;

    LeaveCriticalSection(&cs);
}

所以这应该是一个简单的线程安全推送。

我认为T * chunk需要是volatile,因为我不希望任何线程缓存该值,因为其中一个可能会重新分配并更改它。

向量本身不应该是易变的,因为即使其内容发生变化,对象本身也不会移动。

矢量模板类型我不确定,一方面c ++不会让我推动volatile类型所以我必须将它转换为非易失性。同时,它也是一个多个消费者容器,当其中一个弹出容器时,它会清除向量。因此,如果要缓存块[2]的地址,那么事情肯定会出错。

那么,矢量类型模板是否应该是易变的?

0 个答案:

没有答案