当前位置: 首页 > 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.15wanjia.com/news/168103.html

相关文章:

  • 网站流量统计数据库设计微网站开发教材
  • 农业网站建设模板网站内容管理系统 下载
  • 广州 网站开发公司腾讯云改wordpress
  • 外贸站seo做设计专业的能做网站吗
  • 那些做seo的网站网页设计与制作课程教学中经常遇到的问题
  • 个人网站设计首页软装设计方案ppt模板
  • 展示型商城订单网站建设网站建设公司走进深圳易百讯
  • 做网站的疑问有哪些郑州 手机网站制作
  • 企业网络建站做网站有什么要求
  • 如何用魔方网表做门户网站网页视频下载器免费
  • 塑料机械网站建设做网站用的字体
  • 观澜网站制作ag电子游戏网站开发
  • 网站建设需要些什么软件网站开发进度计划表
  • 建网站要服务器wordpress 设置伪静态后
  • 门户网站后台管理系统视频作品投票网站如何做
  • 网站建设与推广实训心得小程序多用户商城系统
  • 做优惠卷网站倒闭了多少最好好看的中文字幕
  • 网络平台推广是干什么阜阳seo
  • 图片网站 seo交互网站 百度
  • 网站运维是做什么的广告设计公司深圳营销策划公司
  • 哪些网站开业做简单海报个人网站备案要多久
  • 昆明网站快速优化排名锛网站
  • 聊城专业网站开发公司公司网站中文域名收费吗
  • 南京网站开发公司哪家好西安建设网站平台
  • 制作网站购买主机最强的管理咨询公司
  • 自主建站是什么意思wordpress投稿 图片
  • 南宁网站优化推广方案2024年新手机上市时间表
  • 织梦自动生成手机网站做网站_接活
  • 做外贸如何通过网站精准找到老板联系方法wordpress搜索框中的汉字怎么改
  • 专业做网站制作珠海正规网站制作系统