何时出队大小调用不是线程安全的?

问题描述 投票:0回答:1

[通常,对标准容器的操作为not thread safemostly)。重新分配发生时,请在size上调用std::vector,例如may fail

由于dequeue does not reallocate or move the elements像标准向量一样,在出队上调用size时是否仍存在某些条件会不安全?似乎最可能的情况是在进行size调用时在不同的线程中添加/删除元素,但是由于访问了integer is mostly safe,因此我很难考虑如何从单独的线程中调用size会有问题。

c++ multithreading stl deque
1个回答
0
投票

例如这样

std::deque<int> dq;
dq.push_back(1);

// thread0
void printElementIfExist() {
    if (dq.size() > 0) {
        std::cout << dq[0] << std::endl;
    }
}
// thread1
void removeElementFromDeque() {
    if (dq.size() > 0) {
        dq.pop_back();
    }
}

竞赛条件可能允许访问已释放的dq[0]

返回到size()本身。在某些架构中,读取操作不是原子操作。

© www.soinside.com 2019 - 2024. All rights reserved.