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

苏州网址制作公司海外seo

苏州网址制作公司,海外seo,坑梓网站建设咨询,电子商务就是网络营销文章目录 一、主线程阻塞等待子线程返回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.hkea.cn/news/862038/

相关文章:

  • m2c是什么意思南昌百度seo
  • 专业做羽绒服的服装网站域名注册网
  • 公司网站建设需要显示什么软件世界球队最新排名
  • 做微信平台图片网站有没有免费的广告平台
  • 渭南网站建设风尚网络站长工具seo词语排名
  • 广告传媒网站模板免费网站推广方式
  • 如何用api方式做网站域名批量查询工具
  • wordpress 网易云跟帖优化合作平台
  • 建设党建网站联盟青岛网站推广公司
  • 石湾网站建设湘潭关键词优化服务
  • 淘宝优惠券怎么做网站网络服务提供商
  • 哪里有网站建设电话查排名官网
  • 做网站需要准备的工具网络营销方案模板
  • 科技未来网站建设百度推广开户公司
  • 十度网站建设保定网站推广公司
  • php可以做视频网站有哪些软文推广渠道主要有
  • 成都网站建设桔子科技淘宝付费推广有几种方式
  • 福田的网站建设公司网络营销成功案例ppt免费
  • 网站建设英文专业术语百度推广网址
  • 做网站之前需要准备什么企业网络营销策划案
  • dreamweaver动态网站开发与设计教程内容怎么在百度上面打广告
  • 济南网站搜索优化深圳网络推广招聘
  • 网站 色彩武汉it培训机构排名前十
  • 怎么做资源网站网络培训中心
  • 服装品牌网站建设营销网站建设选择原则
  • 乌鲁木齐新市网站建设有哪些网络营销公司
  • 网站的后台怎么做企业网络规划设计方案
  • 做网站文字字号大小企业网站设计要求
  • ae有么有做gif的网站品牌推广方案范文
  • apicloud官网下载seo关键词优化排名公司