请教不用加volatile的情况

sevensi163 2015-03-12 10:15:06
开启编译器的优化功能,一些跟寄存器相关的变量要加上volatile,
那什么样的变量可以不加?感觉好像都要加。有哪位大神知道吗
...全文
409 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
这位仁兄,你为什么不给我一个EXE文件让我优化呢?把程序A换成程序B,从C换成C++,你觉得这样无理取闹有意思吗?
Beinggeeks 2015-03-14
  • 打赏
  • 举报
回复
加上volatile,就是为了防止编译器把寄存器、内存、外设接口给优化了,一般进程、中断函数中用的比较多
derekrose 2015-03-14
  • 打赏
  • 举报
回复
引用 32 楼 sholber 的回复:
[quote=引用 31 楼 derekrose 的回复:] [quote=引用 30 楼 sholber 的回复:] [quote=引用 29 楼 derekrose 的回复:] 。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
看热闹不怕事大呀。 虽然你是板猪,我俩一人给你一下子,你照样哑火,Is'nt it ?[/quote] 哥们 我说的pk就是专指技术讨论 你俩在这互相掐真没啥意思 板猪什么的少说 换了别的板猪你早就禁言了[/quote] 哈哈,开开玩笑怕什么。说话,禁言也不能光禁我一个,那个fmouse那“货”也得禁,不然不公平啊……哈哈[/quote] 是的 都得禁,所以讨论讨论问题就行了 别互相嘴炮了
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 31 楼 derekrose 的回复:
[quote=引用 30 楼 sholber 的回复:] [quote=引用 29 楼 derekrose 的回复:] 。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
看热闹不怕事大呀。 虽然你是板猪,我俩一人给你一下子,你照样哑火,Is'nt it ?[/quote] 哥们 我说的pk就是专指技术讨论 你俩在这互相掐真没啥意思 板猪什么的少说 换了别的板猪你早就禁言了[/quote] 哈哈,开开玩笑怕什么。说话,禁言也不能光禁我一个,那个fmouse那“货”也得禁,不然不公平啊……哈哈
derekrose 2015-03-14
  • 打赏
  • 举报
回复
引用 30 楼 sholber 的回复:
[quote=引用 29 楼 derekrose 的回复:] 。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
看热闹不怕事大呀。 虽然你是板猪,我俩一人给你一下子,你照样哑火,Is'nt it ?[/quote] 哥们 我说的pk就是专指技术讨论 你俩在这互相掐真没啥意思 板猪什么的少说 换了别的板猪你早就禁言了
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 29 楼 derekrose 的回复:
。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
看热闹不怕事大呀。 虽然你是板猪,我俩一人给你一下子,你照样哑火,Is'nt it ?
derekrose 2015-03-14
  • 打赏
  • 举报
回复
。。。咋还吵吵起来了 既然互相都不服就来pk吧 别扯什么情商做人语言学的了 最喜欢看别人pk了呢!
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
阿兰。图灵的传记电影《The Imitation Game》,看看吧,1080p的。
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 26 楼 FancyMouse 的回复:
[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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 这话应该我来说。我也是看什么人说什么话,所以,你听起来就不爽了,于是你就蹦起来了。听过那个相声吗--“我大学毕业我跟谁说过”,你的心态就像这个。 论坛是个自由讨论的地方,你怕人说就不要来。你说话本来就是给人看,供人评论的,玩不起还来干嘛。[/quote] 变成我怕人说了。也是醉了。怕人说我回帖干啥? 而且拉回原来的话题,标准委员会花多少时间在一个特性上和一个特性研究的时间多少根本就没有关系。因为当初没有仔细思考过后来被深深的坑了的例子还少么?我就说我知道的volatile,你来扯标准委员会花多少时间引入,这不是瞎BB是啥。 做人成熟点。[/quote] 一个人文化素养不够是多么可怕的事! ”你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。“ ——这本来是一句调侃的话(也许是我看美剧看多了),居然引发这么大一件事。 我的评价是,少看点计算机的书,多学学人情世故。[/quote] 你要是平时说话少点刺,我是不会把这句话看成刺的。你真以为这句话是唯一的原因?回头看看自己其他帖子吧。真要不是故意带刺的话,那我承认我说过头了。[/quote] 不争了,不争了。我羸了,会多块肉,你输了,会少块肉吗? 我要上帝国下电影了。祝生活愉快! 刺还是要带的——我就不明白,明明自己对某个问题的认识不对,还要龇牙咧嘴、争先恐后地发言(不是说你啊),所以刺还是要带滴……
FancyMouse 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 这话应该我来说。我也是看什么人说什么话,所以,你听起来就不爽了,于是你就蹦起来了。听过那个相声吗--“我大学毕业我跟谁说过”,你的心态就像这个。 论坛是个自由讨论的地方,你怕人说就不要来。你说话本来就是给人看,供人评论的,玩不起还来干嘛。[/quote] 变成我怕人说了。也是醉了。怕人说我回帖干啥? 而且拉回原来的话题,标准委员会花多少时间在一个特性上和一个特性研究的时间多少根本就没有关系。因为当初没有仔细思考过后来被深深的坑了的例子还少么?我就说我知道的volatile,你来扯标准委员会花多少时间引入,这不是瞎BB是啥。 做人成熟点。[/quote] 一个人文化素养不够是多么可怕的事! ”你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。“ ——这本来是一句调侃的话(也许是我看美剧看多了),居然引发这么大一件事。 我的评价是,少看点计算机的书,多学学人情世故。[/quote] 你要是平时说话少点刺,我是不会把这句话看成刺的。你真以为这句话是唯一的原因?回头看看自己其他帖子吧。真要不是故意带刺的话,那我承认我说过头了。
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 24 楼 FancyMouse 的回复:
[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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 1,论坛是个开放的地方,玩不起不要来; 2,相比于C语言,我对你的了解更多(通过这两个回合)。乌鸦可以笑猪黑,这不犯法,骂人是素质人品问题,建议别忘刷牙。[/quote] 1. 话里带刺的比单单说几句脏话的素质差不是一个数量级。你觉得你道德高尚自便。真奇怪程序员还有这么注重表面功夫的。氛围就是被你这种说话带个刺然后宣称自己不是源头的人给带坏的。这种人标准称呼叫做troll。 2. 你觉得你比我了解的更多,那就算这样吧。事实也差不多,我基本不懂C也不懂C++,标准文本读过的部分1%都不到,基本都是现用现搜,比你懂的多才奇怪呢。[/quote] 首先,我不是程序员,虽然十几年前我干过这一行。我的工作和计算机关系不大; 其次,话里带刺是语言学的范畴,是语言技巧问题,而脏话永远是素质问题; 再次,我是说,我对你的了解比我了解计算机更多——换言多,我了解你,不太了解计算机,不要看错了; 第四,嘴上带刺的人往往很好心,我相信我就是这样的; 最后,你最后的发言让我很不好意思 ,因此,我向你道个歉!这是我衷心的。
FancyMouse 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 1,论坛是个开放的地方,玩不起不要来; 2,相比于C语言,我对你的了解更多(通过这两个回合)。乌鸦可以笑猪黑,这不犯法,骂人是素质人品问题,建议别忘刷牙。[/quote] 1. 话里带刺的比单单说几句脏话的素质差不是一个数量级。你觉得你道德高尚自便。真奇怪程序员还有这么注重表面功夫的。氛围就是被你这种说话带个刺然后宣称自己不是源头的人给带坏的。这种人标准称呼叫做troll。 2. 你觉得你比我了解的更多,那就算这样吧。事实也差不多,我基本不懂C也不懂C++,标准文本读过的部分1%都不到,基本都是现用现搜,比你懂的多才奇怪呢。
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 这话应该我来说。我也是看什么人说什么话,所以,你听起来就不爽了,于是你就蹦起来了。听过那个相声吗--“我大学毕业我跟谁说过”,你的心态就像这个。 论坛是个自由讨论的地方,你怕人说就不要来。你说话本来就是给人看,供人评论的,玩不起还来干嘛。[/quote] 变成我怕人说了。也是醉了。怕人说我回帖干啥? 而且拉回原来的话题,标准委员会花多少时间在一个特性上和一个特性研究的时间多少根本就没有关系。因为当初没有仔细思考过后来被深深的坑了的例子还少么?我就说我知道的volatile,你来扯标准委员会花多少时间引入,这不是瞎BB是啥。 做人成熟点。[/quote] 一个人文化素养不够是多么可怕的事! ”你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。“ ——这本来是一句调侃的话(也许是我看美剧看多了),居然引发这么大一件事。 我的评价是,少看点计算机的书,多学学人情世故。
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 1,论坛是个开放的地方,玩不起不要来; 2,相比于C语言,我对你的了解更多(通过这两个回合)。乌鸦可以笑猪黑,这不犯法,骂人是素质人品问题,建议别忘刷牙。
FancyMouse 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 这话应该我来说。我也是看什么人说什么话,所以,你听起来就不爽了,于是你就蹦起来了。听过那个相声吗--“我大学毕业我跟谁说过”,你的心态就像这个。 论坛是个自由讨论的地方,你怕人说就不要来。你说话本来就是给人看,供人评论的,玩不起还来干嘛。[/quote] 变成我怕人说了。也是醉了。怕人说我回帖干啥? 而且拉回原来的话题,标准委员会花多少时间在一个特性上和一个特性研究的时间多少根本就没有关系。因为当初没有仔细思考过后来被深深的坑了的例子还少么?我就说我知道的volatile,你来扯标准委员会花多少时间引入,这不是瞎BB是啥。 做人成熟点。
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。[/quote] 这话应该我来说。我也是看什么人说什么话,所以,你听起来就不爽了,于是你就蹦起来了。听过那个相声吗--“我大学毕业我跟谁说过”,你的心态就像这个。 论坛是个自由讨论的地方,你怕人说就不要来。你说话本来就是给人看,供人评论的,玩不起还来干嘛。
FancyMouse 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。[/quote] 我一般是看什么人说什么话的。看这种自己水平也就那样,还十句话里九句带刺的我就是不爽。
jiht594 2015-03-14
  • 打赏
  • 举报
回复
据说嵌入式编程时, 需要用到, 但是我没接触过 只有多线程共享的基本数据类型 需要这个关键字(个人理解, 如果错了 不要打我,)
均陵鼠侠 2015-03-14
  • 打赏
  • 举报
回复
引用 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;
}
引用 10 楼 FancyMouse 的回复:
volatile大多数情况下对付的不是cpu修改的内存。memory mapping以后设备更新内存的时候它自己是没法invalidate cpu端的cache的,需要cpu主动invalidate cache再读内存才能读到正确的值。 cpu这边的话C和C++新版标准现在都有多线程的memory model,编译器不会对于全局变量这种其他线程可见的变量也假设成单线程给错误的优化掉,所以你们战的例子其实没啥意义。不过话说回来volatile本身也和多线程没啥关系,这要战起来也是暴露水平的。
你们在volatile上花的时间比当初决定在标准中引入这个关键字时花的时间要多,超出了一个数量级。[/quote] 关你吊事。我自己理解就看几篇文档几分钟的事,教人的时候才花的时间多。我愿意花时间告诉别人我知道的,不用你瞎BB。[/quote] 是“屌”不是“吊”,古人有时候成写“鸟”,注意提高文化素养。 C语言和屌有什么关系,还真没注意。话说理解屌有时候几分钟是不够的,仁兄你又吹牛了。 本来觉得你人不错,谁知道你一张嘴就漏了馅。看来网络不靠谱。
加载更多回复(13)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧