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

外贸网站如何建设网站前端模板

外贸网站如何建设,网站前端模板,四川住房建设厅网站,全媒体运营师证报名入口一:概述 如果一个线程被 detach() 了,那么它的生命周期将独立于创建它的作用域。因此,该线程只能安全地访问: 全局变量(global/static objects)堆上分配的对象(free-store allocated objects&a…

一:概述

        如果一个线程被 detach() 了,那么它的生命周期将独立于创建它的作用域。因此,该线程只能安全地访问:

  1. 全局变量(global/static objects)
  2. 堆上分配的对象(free-store allocated objects,即 new / make_unique() 创建的对象) 其他作用域的对象可能会在线程访问它们之前被销毁,导致 悬空指针(dangling pointer) 和 未定义行为。

二:示例代码

        下面以一段代码来介绍下前面说的这种情况:

#include <iostream>
#include <thread>
#include <memory>void f(int* p) {*p = 99;  // 可能访问悬空指针
}int glob = 33;  // 全局变量void some_fct(int* p) {int x = 77;std::thread t0(f, &x);         // 错误!x 是局部变量std::thread t1(f, p);          // 错误!p 可能指向局部变量std::thread t2(f, &glob);      // OK!glob 是全局变量auto q = std::make_unique<int>(99);std::thread t3(f, q.get());    // 错误!q 在 some_fct 结束时销毁t0.detach();t1.detach();t2.detach();t3.detach();
}

    在这段代码中,线程detach后,会有以下几种情况发生:

  1. t0(f, &x);t1(f, p);

    • xsome_fct() 的局部变量,p 可能指向局部变量。
    • t0t1 可能会在 some_fct() 结束后访问已销毁的变量,导致 未定义行为。
  2. t3(f, q.get());

    • qmake_unique<int>(99) 创建的智能指针,q.get() 获取的指针在 some_fct() 结束时无效。
    • std::unique_ptr 在函数返回时析构,导致 t3 访问无效内存。
  3. t2(f, &glob);

    • 由于 glob 是全局变量,它的生命周期足够长,可以安全地被 t2 访问。

三:解决方案

        如何避免线程detach后的空悬指针和未定义行为?有以下两种方案:

        1. 只使用全局变量或堆分配的对象

#include <iostream>
#include <thread>
#include <memory>void f(int* p) {*p = 99;
}int glob = 33;void some_fct(int* p) {auto q = new int(99);   // 使用堆对象std::thread t1(f, &glob);  // OK,全局变量std::thread t2(f, q);      // OK,堆上分配的对象t1.detach();t2.detach();// 需要手动释放 q,避免内存泄漏delete q;
}

       2. 避免 detach(),使用 std::thread::join()joining_thread

void some_fct() {int x = 77;std::thread t(f, &x);  // OK,因为 t.join() 之前 x 一直有效t.join();              // 等待线程结束,确保不会访问销毁的对象
}
class joining_thread {std::thread t;
public:template <typename... Args>explicit joining_thread(Args&&... args) : t(std::forward<Args>(args)...) {}~joining_thread() {if (t.joinable()) {t.join();}}
};void some_fct() {int x = 77;joining_thread t(f, &x);  //  OK
}


文章转载自:

http://JO89XBTR.zrfwz.cn
http://csTupmJ7.zrfwz.cn
http://6WF1nZwu.zrfwz.cn
http://IYv295Ih.zrfwz.cn
http://xrcek3AD.zrfwz.cn
http://ZcM6SHpB.zrfwz.cn
http://C2HVWctP.zrfwz.cn
http://GjmwvAVp.zrfwz.cn
http://DknNHjb6.zrfwz.cn
http://F6fcJsUC.zrfwz.cn
http://qvXoyPth.zrfwz.cn
http://pc7L2jBU.zrfwz.cn
http://zh4a0H70.zrfwz.cn
http://8eQut6HH.zrfwz.cn
http://69840C8h.zrfwz.cn
http://A3qvQ9T2.zrfwz.cn
http://qshqhp55.zrfwz.cn
http://ZnNpYgV6.zrfwz.cn
http://zzOgA8NU.zrfwz.cn
http://4gXFgluJ.zrfwz.cn
http://4dxI8VJa.zrfwz.cn
http://LQJyxrPN.zrfwz.cn
http://K3mQ3vPj.zrfwz.cn
http://XBP4svhN.zrfwz.cn
http://tmdZM6FZ.zrfwz.cn
http://NmC5gOXY.zrfwz.cn
http://dB4RncVb.zrfwz.cn
http://PDpirhHe.zrfwz.cn
http://LzXBrCVv.zrfwz.cn
http://OZDoq056.zrfwz.cn
http://www.dtcms.com/wzjs/613679.html

相关文章:

  • 钟山县住房和城乡建设局网站高级网站开发工程师工资
  • 不良网站进入窗口免费正能量360怎么做网站排名
  • 备案查询站长工具网站地图怎么做XML
  • 微信分销网站建设wordpress自定义小工具插件
  • 网站试用模块泊头做网站的
  • ae有么有做gif的网站一流的山西网站建设
  • 高校部门网站建设cad图做网站链接
  • 秒玩大型游戏的网站哪个网站上做ppt比较好看的
  • 找网站公司企业备案建筑图纸怎么学看图
  • 纪检网站建设计划黔南网站建设多少钱
  • 手机做网站淘宝推广费用多少钱一天
  • 合肥企业做网站wordpress 占内存
  • dede网站图标海外推广面试问题
  • 做电影海报在哪个网站好合肥装饰公司做的好的网站
  • 北京人力资源网站机关网页设计价格表
  • 做网站需要写代码吗网站项目策划方案
  • 免费word模板下载哪个网站wordpress手机版中文版
  • 优秀网站设计作品建设银行网站注册不了
  • 网站更换空间后排名消失 首页被k网页设计 公司
  • 小说网站开发中遇到的问题小说排行榜
  • 做苗木选择哪个网站wordpress 副标题 seo
  • 企业公司网站模板石家庄旅游景点
  • 微信点赞网站怎么做wordpress公告 通知栏插件
  • 电子商务行业分析长沙网站优化seo
  • 网站开发需要掌握的知识烟台seo关键词排名
  • 网站建设刂搜金手指下拉贰肆wordpress 文件管理器
  • 网站域名备案流程卫计局网站建设工作总结
  • 深圳网站建设公司排名购买腾讯备案网站
  • 可用的ftp网站广州网站优化系统
  • 哪家招聘网站的猎头做的比较好网站建设九亭