while (bStart) 不起作用,在debug下可以结果正常,但是在release下结果不正常。

飞翔的薄荷 2015-06-30 10:23:08
在debug下可以正常停止,但是在release下程序不能停止,vs2015和vs2013都测试了。

代码如下:

#include <iostream>
#include <thread>

int main()
{
bool bStart = true;
std::thread th(
[&bStart]()->void
{
bool toggle = false;
while (bStart) toggle = !toggle;
}
);
std::this_thread::sleep_for(std::chrono::seconds(1));
bStart = false;
th.join();
}


//在debug下可以正常停止,但是在release下程序不能停止


为何?????
刚才用g++编译,在linux上也测试了,如果编译用添加-O4选项,程序也不能停止。






...全文
130 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dustpg 2015-07-01
  • 打赏
  • 举报
回复
多线程读写同一变量要加锁啊,不加锁就用原子变量啊
#include <iostream>
#include <thread>
#include <atomic>

int main() {
    std::atomic_bool bStart  = true;
    std::thread th(
        [&bStart]()->void {
            bool toggle  = false;
            while (bStart)    toggle  = !toggle;
        }
    );
    std::this_thread::sleep_for(std::chrono::seconds(1));
    bStart  = false;
    th.join();
    return 0;
}
Saleayas 2015-06-30
  • 打赏
  • 举报
回复
volatile
赵4老师 2015-06-30
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。Linux下使用GDB)是程序员必须掌握的技能之一。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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