【发布时间】:2015-01-15 11:17:11
【问题描述】:
在 C++ 03 中同时从两个不同的 POSIX 线程访问同一对象的两个不同的类成员是否被认为是线程安全的?
【问题讨论】:
-
在 C++ 03 中没有标准的内存模型,所以无法从 C++ 标准的角度来回答这个问题。
-
由于它们是不同的内存位置,尽管无论内存/一致性模型如何,它都应该是线程安全的,除非线程试图在这些成员上同步。
-
@computador7 我们需要一个 C++ 中的内存模型,因为你说的不是真的 - 如果编译器不知道环境是多线程的,它会做很多类型的优化,通常涉及到触摸他们不应该在多线程环境中的内存位置。也就是说,
-pthread至少应该部分解决这个问题。 -
你指的是什么样的优化?首先,如果您从不同的线程访问不同的内存位置,则不会出现竞争条件。现在,如果线程需要以正确的顺序查看其他线程更新,这就是内存模型规范的用武之地!接下来,我认为编译器在多线程环境中不应该触及内存位置,即使有任何内存位置,我也看不出你所指的那些优化是如何做到的!你能详细说明一下吗?
-
-pthread 链接 pthread 库和一些用于重入和线程本地存储的宏我不明白它与此有何关系。
标签: c++ multithreading thread-safety c++03