Closed longjianjiang closed 5 years ago
刚才在查 volatile 关键字的时候,搜到了您的文章,读完了,好文章。
volatile
不过读完有一个疑问,关于 atomic 解决多线程问题。
atomic
thread2(Type* value) { // do some evaluations value->update(/* parameters */); flag = true; return; }
当 编译器仍有可能在优化时将 thread2 中的 update 和对 flag 的赋值交换顺序。 , 这个时候,使用同步是不是依然不能保证正确执行?
编译器仍有可能在优化时将 thread2 中的 update 和对 flag 的赋值交换顺序。
PS:我理解的多线程主要基于数据共享这一情况,一个线程在读另一个线程在写,所以导致了错误。但是我在作者文中看到提出的两个问题都和编译器有关。文中举出的例子,如果只有两个线程的话,基于代码的逻辑执行我觉得应该是没有问题的,不知道理解的是否正确。
希望作者给个解答,万分感激🙏。
刚才在查
volatile
关键字的时候,搜到了您的文章,读完了,好文章。不过读完有一个疑问,关于
atomic
解决多线程问题。当
编译器仍有可能在优化时将 thread2 中的 update 和对 flag 的赋值交换顺序。
, 这个时候,使用同步是不是依然不能保证正确执行?PS:我理解的多线程主要基于数据共享这一情况,一个线程在读另一个线程在写,所以导致了错误。但是我在作者文中看到提出的两个问题都和编译器有关。文中举出的例子,如果只有两个线程的话,基于代码的逻辑执行我觉得应该是没有问题的,不知道理解的是否正确。
希望作者给个解答,万分感激🙏。