69,373
社区成员
发帖
与我相关
我的任务
分享
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
[quote=引用 31 楼 derekrose 的回复:] [quote=引用 30 楼 sholber 的回复:] [quote=引用 29 楼 derekrose 的回复:] 。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
[quote=引用 30 楼 sholber 的回复:] [quote=引用 29 楼 derekrose 的回复:] 。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
[quote=引用 29 楼 derekrose 的回复:] 。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
[quote=引用 23 楼 sholber 的回复:] [quote=引用 21 楼 FancyMouse 的回复:] [quote=引用 20 楼 sholber 的回复:] [quote=引用 19 楼 FancyMouse 的回复:] [quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 21 楼 FancyMouse 的回复:] [quote=引用 20 楼 sholber 的回复:] [quote=引用 19 楼 FancyMouse 的回复:] [quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 22 楼 sholber 的回复:] [quote=引用 19 楼 FancyMouse 的回复:] [quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 19 楼 FancyMouse 的回复:] [quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 20 楼 sholber 的回复:] [quote=引用 19 楼 FancyMouse 的回复:] [quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 19 楼 FancyMouse 的回复:] [quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 17 楼 sholber 的回复:] [quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 16 楼 FancyMouse 的回复:] [quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
[quote=引用 15 楼 sholber 的回复:] [quote=引用 9 楼 flyrack 的回复:]给你代码 你优化出来给我看看 孤陋寡闻。你试试: gcc ... 和 gcc ... -O3 没试过我会出来说吗?#include <iostream> #include <thread> #include <chrono> #include <stdio.h> int ready=0; void foo() { std::chrono::seconds second(1); std::this_thread::sleep_for(second); ready=1; } int main() { std::thread (foo).detach(); int n=0; while (!ready) { std::cout<<n++<<"\n"; } return 0; }
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。