std::stack::push和std::stack:pop是线程安全的

Are std::stack::push and std::stack:pop thread safe?

本文关键字:std stack 安全 线程 push pop      更新时间:2023-10-16

我需要用互斥锁保护我的push()pop()调用吗?还是它们在内部是线程安全的

我想写的代码看起来像这个

parallel for (int i = 0; i < 100; i++) {
    ...
    s.push(...);
    ...
}

我不确定在哪里可以查看我正在使用的STL容器的线程安全性。我检查了这个参考资料,但它没有提到任何关于线程安全的内容。

它们不是内部线程安全的。在这方面,标准不要求从多个线程对容器和容器适配器进行写入操作是安全的,因此您必须应用一些同步机制。

您希望从标准库获得的唯一线程安全保证是,您可以从不同的线程读取它们,并且可以从不同线程修改不同的实例(即:没有非线程安全的全局状态)。

任何从不同线程修改同一对象的尝试都将以撕裂告终。