当前位置: 首页 > news >正文

东南融通网站建设用五百丁做名字的简历网站

东南融通网站建设,用五百丁做名字的简历网站,写网站建设需求,深圳外贸公司倒闭文章目录 一、主线程阻塞等待子线程返回1、代码示例2、代码改进 一、主线程阻塞等待子线程返回 主线程等待一个线程,此线程会开始连接一个服务器并循环读取服务器存储的值,主线程会阻塞直到连接服务器成功。因为如果不阻塞,可能上层业务刚开…

文章目录

        • 一、主线程阻塞等待子线程返回
          • 1、代码示例
          • 2、代码改进

一、主线程阻塞等待子线程返回

主线程等待一个线程,此线程会开始连接一个服务器并循环读取服务器存储的值,主线程会阻塞直到连接服务器成功。因为如果不阻塞,可能上层业务刚开始读不到数据。

1、代码示例
bool bConnect = false;  // 退出条件void connectAndReadFromServer()
{// 模拟等待2秒连接服务器成功Sleep(2000);bConnect = true;// 模拟一个无限循环读取服务器数据while (true){qDebug() << "I am working";Sleep(1000);}
}int main(int argc, char *argv[])
{std::thread t(connectAndReadFromServer);// 阻塞等待子线程返回,该方式在debug下运行ok,release下不会阻塞。while (!bConnect){}qDebug() << "main thread continue, start read " << bConnect;return 0;
}

坑点:上述代码在debug下运行是没有问题的,因为编译器会关闭大部分优化,目的是保留代码的原始行为,方便调试。 但是在release模式下,编译器发现该循环内部无任何操作,会采取循环消除优化,直接跳过,主线程继续执行,所以此时bConnect为false。

2、代码改进
int num = 0;
while (!bConnect)
{Sleep(0);   // ok 正常阻塞//空函数(); // no 直接优化去掉//num++;  // no bConnect条件拿不到
}
  • Sleep(0) :主动放弃CPU时间片,重新线程调度,还可以刷新主线程的寄存器和缓存,让线程重新从内存中读取变量的最新值。
  • 空函数() :在release下,该循环不执行,直接被编译器优化掉。
  • 变量++:就算连接成功,编译器也会在release下优化,bConnect条件变量的值被缓存到寄存器中(因为要大量循环读),导致主线程无法感知到变量的变化。循环一直执行。所以可以给变量num加volatile关键字,这样也是可以正常阻塞的,通知编译器不要优化该变量,每次都从内存中读取最新的值。
http://www.yayakq.cn/news/31482/

相关文章:

  • 怎样做打赏网站制作一个公司网站多少
  • 毕业设计做网站简单吗医疗网站几个人做竞价
  • 建设商城网站报价网络营销工程师有用吗
  • 药企网站怎么做天猫商城网上购物
  • 可以用自己的电脑做网站主机手机网站建设报价表
  • 怎么查看网站是否降权一个公司的管理流程
  • 帮忙做任务网站做淘宝的货源网站
  • 网站备案管局审核北京网站制作开发公司
  • h5网站搭建动力风网站建设及软件开发合同
  • 网络公司网站设计维护合同辽宁建设工程信息网怎么办锁
  • 网站开发 质量管理名牌网站设计的图片
  • 一个域名建多个网站wordpress 加广告位
  • wordpress改网站地址一个刚有官网的公司怎么做网站运营
  • 中小微企业查询网站成都关键词优化技术
  • 顺德网站建设itshunde不用网络的游戏
  • 网站设计要求wordpress 3.5.2
  • 开源站群cms网站标题在哪里修改
  • 什么网站可以接单做设计网站建设费用分录
  • 做网站时 404网页如何指向一般网站开发的硬件要求
  • 自做购物网站多少钱网站开发提问
  • 网站怎么做商桥建设网站 织梦
  • 网站建设合同 完整版2018年做淘宝客网站还能挣钱吗6
  • 自学网站有哪些自学网咨询类网站建设
  • wordpress制作上传图片wordpress 百度seo插件
  • 政务网站设计鉴赏商城购物网站建设
  • 国外网站有备案吗网站页面是自己做还是使用模板
  • 如何用阿里云做网站浏览器网址
  • 信誉好的专业网站建设宁波网站建设哪家快
  • 重庆城市建设网站扁平化 手机网站首页
  • 中关村能力建设网站网站开发企业部门