Stroustrup在C++第4版第1193页中给出了以下示例。我的问题是使用两个线程的并发程序,一个线程用于f()
,另一个线程用于g()
和Stroustrup的语句:
变量c
和b
会怎样?
据我了解,在某些硬件上,一个单词是2个字节,并且两个变量都包含在其中,一个线程可能会覆盖另一个线程的char
。
Stroustrup进一步声明以下内容:
对于此问题的解决方案,我的困惑是C++链接程序是否将c
放在一个2字节的内存地址中,而b
放在另一个?
// thread 1
char c = 0;
void f()
{
c = 1;
int x = c;
}
char b = 0;
void g()
{
b = 1;
int y = b;
}
最佳答案
Stroustrup提出的要点是,需要C++实现来执行特定硬件上所需的一切,以使事情按内存模型的要求工作。那可能取决于硬件的细节。特定的缓存体系结构可能允许从不同的线程同时修改同一“字”中的两个值。如果特定的缓存体系结构无法做到这一点,那么实现工作就是确保每个单独的C++对象仍然能够按照内存模型正确运行。这可能需要插入填充或进行特殊的写操作等。
关于c++ - C++内存模型char vs word,并发?从Stroustrup书中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63317229/