问题:
多个线程可以同时调用push_back () 共享 std::vector 对象上的方法而不影响线程安全?或者,用户是否需要实现额外的同步机制?
答案:
与流行的假设相反,标准 C 向量 (std::vector) 和Boost向量(boost::vector)按照C标准提供有限的线程安全保证。
线程安全保证:
这些保证可能与线程安全的典型期望不一致,但考虑到标准容器的设计,它们是明智的,它优先考虑单线程场景中的高效访问。在方法中加入锁定机制会阻碍这种效率。
外部锁定:
为了保证多线程并发访问容器时的线程安全,必须实现外部同步机制。具体要求在 C 标准第 17.6.4.10 节 [res.on.objects] 第 1 段中概述。
Boost Vector 注意事项:
线程安全保证考虑到它们的接口相似,Boost 向量的期望与标准向量的相同。然而,为了保证安全的并发访问,外部锁定仍然是必要的。
结论:
虽然标准 C 和 Boost 向量提供了一定的线程安全保证,但它们是有限的。为了在多线程场景下实现完整的线程安全,必须采用外部同步机制来防止数据竞争。
以上是标准 C 和 Boost 向量对于并发 `push_back()` 操作是线程安全的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!