Liam0205 / liam0205.github.io

Deployment of my weblog.
https://liam0205.github.io
35 stars 5 forks source link

【谈谈 C/C++ 中的 volatile】中的一个疑问。 #283

Closed longjianjiang closed 5 years ago

longjianjiang commented 5 years ago

刚才在查 volatile 关键字的时候,搜到了您的文章,读完了,好文章。

不过读完有一个疑问,关于 atomic 解决多线程问题。

thread2(Type* value) {
    // do some evaluations
    value->update(/* parameters */);
    flag = true;
    return;
}

编译器仍有可能在优化时将 thread2 中的 update 和对 flag 的赋值交换顺序。 , 这个时候,使用同步是不是依然不能保证正确执行?

PS:我理解的多线程主要基于数据共享这一情况,一个线程在读另一个线程在写,所以导致了错误。但是我在作者文中看到提出的两个问题都和编译器有关。文中举出的例子,如果只有两个线程的话,基于代码的逻辑执行我觉得应该是没有问题的,不知道理解的是否正确。

希望作者给个解答,万分感激🙏。