[通常,对标准容器的操作为not thread safe(mostly)。重新分配发生时,请在size
上调用std::vector
,例如may fail。
由于dequeue
does not reallocate or move the elements像标准向量一样,在出队上调用size
时是否仍存在某些条件会不安全?似乎最可能的情况是在进行size
调用时在不同的线程中添加/删除元素,但是由于访问了integer is mostly safe,因此我很难考虑如何从单独的线程中调用size
会有问题。
例如这样
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()
本身。在某些架构中,读取操作不是原子操作。