C++ 线程安全数据和线程安全容器
大家好,我想知道线程安全数据和线程安全容器之间的区别是什么C++ 线程安全数据和线程安全容器,c++,visual-c++,stl,C++,Visual C++,Stl,大家好,我想知道线程安全数据和线程安全容器之间的区别是什么 通常指使用互斥锁、信号量或其他类似结构保护的数据 如果已采取措施确保: 它可以从多个线程以受控的方式进行修改,以确保生成的数据结构不会损坏,或导致代码中出现争用条件 它可以可靠地读取,而不会在读取过程中损坏数据。这对于使用迭代器的STL样式容器尤其重要 互斥锁通常通过在一个线程修改共享数据时阻止对其他线程的访问来工作。这也称为临界截面,是与临界截面一起使用的常见设计模式 根据CPU类型,某些基本数据类型(例如int)和操作(inc
- 通常指使用互斥锁、信号量或其他类似结构保护的数据
- 如果已采取措施确保:
- 它可以从多个线程以受控的方式进行修改,以确保生成的数据结构不会损坏,或导致代码中出现争用条件
- 它可以可靠地读取,而不会在读取过程中损坏数据。这对于使用迭代器的STL样式容器尤其重要
- 互斥锁通常通过在一个线程修改共享数据时阻止对其他线程的访问来工作。这也称为临界截面,是与临界截面一起使用的常见设计模式
- 根据CPU类型,某些基本数据类型(例如int)和操作(increment)可能不需要互斥保护(例如,如果它们解析为机器语言中的原子指令)。然而:
- 对CPU体系结构做出任何假设都是不好的做法
- 您应该始终进行防御性编码,以确保无论目标平台如何,代码都保持线程安全
- 容器应具有适当的措施,以确保以线程安全的方式对其进行任何更改
- 例如,线程安全容器可能允许使用一组特定的公共方法插入或删除项,这些方法确保使用它的任何代码都是线程安全的
- 换句话说,容器类将互斥保护作为一种服务提供给调用者,而用户不必自己滚动