gpt4 book ai didi

c++ - 多线程访问一个 std::map ,会导致不安全行为吗?

转载 作者:太空狗 更新时间:2023-10-29 20:05:40 33 4
gpt4 key购买 nike

如果多个线程访问一个 map 对象,但是,我可以确保这些线程中的任何一个访问都不会具有相同的键,并且访问就像:

//find value by key
//if find
// erase the object or change the value
//else
// add new object of the key

运行会不会导致同步问题?

最佳答案

是的,在没有适当同步的情况下进行并发更新可能会导致崩溃,即使您的线程访问不同的键:std::map 是基于树的,树会重新平衡,因此您可以导致写入到具有看似无关的键的节点的父节点。

此外,在写入的同时执行只读访问或搜索未锁定 + 写入锁定是不安全的:如果您有可能更新或删除节点的线程,则必须在写入之前锁定所有读取器。

关于c++ - 多线程访问一个 std::map ,会导致不安全行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256297/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com