gpt4 book ai didi

c++ - 编译器可以假设没有其他线程会修改参数吗?

转载 作者:太空狗 更新时间:2023-10-29 19:46:26 24 4
gpt4 key购买 nike

考虑这个函数:

void foo(int * p)
{
// something
}

编译器可以假定没有其他线程会修改 p 指向的值吗?或者它是否必须表现得好像这个值可以随时修改?

void bar(volatile int * p)
{
}

如果没有,volatile 关键字有帮助吗? GOTW #69声明 volatile 关键字通常总是被编译器忽略。

编辑:显然对“编译器假设”这个短语存在一些误解。让我澄清一下:

  • 如果编译器这样假设,它可以在第一次读取时将 *p 的值放入寄存器,然后使用它直到 p 超出范围.在那一刻,它应该将 *p 的值写入该内存地址。
  • 如果编译器不这样假设,每次读取 *p 时,编译器都应该从内存中获取它的值,因为其他线程有可能修改它.每次*p改变,编译器应该把它写入内存,以便其他线程可以读取它

最佳答案

编译器不能做出这样的假设,程序员也不能。单独使用 volatile 关键字并不能防止并发访问。

关于c++ - 编译器可以假设没有其他线程会修改参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12358302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com