我std::queue
在多线程环境中使用.其他线程可以根据需要修改队列.在某些时候,我想打电话std::queue::size()
.我是否必须锁定该呼叫的队列?如果我不这样做会发生什么坏事吗?
这是未定义的行为,任何事情都可能发生.当一个线程访问一个对象而另一个线程正在或可能正在修改它时,行为是未定义的.
我不愿意添加这个,因为你是否可以想到它可能失败的方式是不相关的.它没有定义,期间.但是,万一有人认为没有可想象的方法可能会失败:考虑一个动态分配控制结构的队列,该控制结构包含队列的大小和队列中每个对象的信息.当队列被放大时,可以分配新的控制结构,释放旧的结构,并更新指针.并发调用size
可能会获取旧指针,然后在释放后访问它,并且可能包含完全不同的信息,甚至已从内存映射中删除.