线程安全数据和线程安全容器

时间:2009-06-16 05:18:37

标签: c++ visual-c++ stl

嗨大家好我想知道线程安全数据和线程安全容器之间有什么区别

1 个答案:

答案 0 :(得分:4)

线程安全数据

  • 通常是指使用互斥信号量或其他类似结构保护的数据。

  • 如果已采取措施确保:

    ,则数据被视为线程安全
    • 可以通过受控方式从多个线程修改,以确保结果数据结构不会损坏,或导致代码中的竞争条件。
    • 可以以可靠的方式读取,而不会在读取过程中数据损坏。对于使用迭代器的STL样式容器,这一点尤为重要。
  • 当一个线程正在修改共享数据时,互斥锁通常通过阻止对其他线程的访问来工作。这也称为关键部分RAII是与关键部分结合使用的常见设计模式。

  • 根据CPU类型,某些原始数据类型(例如int)和操作(增量)可能不需要互斥保护(例如,如果它们解析为机器语言的原子指令)。但是:

    • 对CPU架构做出任何假设是不好的做法。
    • 您应该始终采取防御性措施,以确保无论目标平台如何,代码都将保持线程安全。

线程安全容器

  • 是否有适当措施的容器,以确保以线程安全的方式对其进行任何更改。

  • 例如,线程安全容器可以允许使用一组特定的公共方法插入或删除项目,这些方法确保使用它的任何代码都是线程安全的。

  • 换句话说,容器类将互斥锁保护作为服务提供给调用者,用户不必自己滚动。