多线程 detach的困惑

求大神解答:

1,当在一个函数里启动一个线程后,并detach了

2,detach的线程里使用了这个函数里new出来的一个对象

3,detach后,delete了这个对象

4,为什么detach在线程里,使用了在3处delete的内存还不报错误???

-----start 更新分割线2018/10/27 上午-------------

回答4的问题:

线程还没来得及执行,main函数就执行完了,直接杀死还没有执行完的线程,所以线程里使用了已经delete的内存,也没有出错。如果在main函数里调用sleep(2),就会出错误。

如果当main函数结束后,还不想结束其他由main函数创建的子线程,就必须调用下pthread_exit(NULL)。

#include <iostream>
#include <thread>
#include <unistd.h> using namespace std; class bad{
public:
bad(int* i) : data(i){
cout << "addr2:" << data << endl;
}
void operator()(){
for(unsigned j = 0; j < 10000000000; ++j){
something(data);
}
}
private:
void something(int* i){
*i = 100;
cout << *i << endl;
};
int* data;
}; void func(){
int* local = new int(10);
cout << "addr1:" << local << endl;
bad b(local);
delete local;
thread t(b);
//cout << "before join " << *local << endl;
cout << "end delete" << endl;
t.detach();
//t.join(); cout << "after join " << *local << endl;
cout << "func end" << endl;
}
int main(){
func();
pthread_exit(NULL);
cout << "end" << endl;
}

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

c/c++ 多线程 detach的困惑的更多相关文章

  1. Java多线程-线程生命周期(一)

    如果要问我Java当中最难的部分是什么?最有意思的部分是什么?最多人讨论的部分是什么?那我会毫不犹豫地说:多线程. Java多线程说它难,也不难,就是有点绕:说它简单,也不简单,需要理解的概念很多,尤 ...

  2. ThreadLocal解决SimpleDateFormat多线程安全问题中遇到的困惑

    测试代码: public class Main { public static void main(String[] args) { for (int k = 0; k < 10; k++) { ...

  3. 26.多线程join detach

    #include <iostream> #include <thread> #include <array> #include <Windows.h> ...

  4. 多线程中的detach

    从 thread 对象分离执行的线程,允许执行独立地持续.一旦线程退出,则释放所有分配的资源.(就是两个线程彼此相互独立) 调用 detach 后, *this 不再占有任何线程. #include ...

  5. [转]Linux 的多线程编程的高效开发经验

    Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...

  6. Linux 的多线程编程的高效开发经验(转)

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  7. Linux 的多线程编程的高效开发经验

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  8. 线程模型、pthread 系列函数 和 简单多线程服务器端程序

    一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...

  9. C++ 11 多线程--线程管理

    说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...

随机推荐

  1. 解决同一页面中两个iframe互相调用jquery,js函数

    这一个月又没更新博客,唉,懒癌又犯了,今天解决了一个问题,关于两个iframe互相调用jquery函数方法 a.html中有两个iframe,如下: <iframe width="10 ...

  2. 002-J2EE-tomcat的配置

    在配置之前我们要先下载一个Tomcat,登入以下网址... 下载解压完了之后可以把里面多余的东西删掉,当然也可以选择不删. 还有这里的也是 如果已经有了 classes 和l ib 目录了, 就不用再 ...

  3. 带着新人学springboot的应用06(springboot+RabbitMQ 中)

    上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个RabbitMQ. 注意:这一节还是不用敲什么代码,因为上一节我们设置了那个可视化工具,我们先用用可视化工具熟悉一下流程. ...

  4. JavaWeb中使用JSON

    前言: 最近也是期末了,有好多好多文档和实验报告要交,所以都没啥时间写文,这段时间清闲了,来补一下之前学习时遗漏的一些知识树,话说就没人吐槽这个JSON图标好丑吗? 什么是JSON JSON 指的是 ...

  5. 【Java基础】【18Map集合&模拟斗D主X排和F排】

    18.01_集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接 ...

  6. Dubbo下一站:Apache顶级项目

    导读: 近日,在Apache Dubbo开发者沙龙杭州站的活动中,阿里巴巴中间件技术专家曹胜利(展图)向开发者们分享了Dubbo2.7版本的规划. 本文将为你探秘 Dubbo 2.7背后的思考和实现方 ...

  7. 第45章 工具 - Identity Server 4 中文文档(v1.0.0)

    该IdentityServerTools是为IdentityServer编写扩展代码时,你可能需要有效的内部工具的集合.要使用它,请将其注入代码,例如控制器: public MyController( ...

  8. JS_正则表达式_获取指定字符之后指定字符之前的字符串

    一个常见的场景,获取:标签背景图片链接: 如字符串:var bgImg = "url(\"https://img30.360buyimg.com/sku/jfs/t26203/26 ...

  9. [转]Chrome 错误代码:ERR_UNSAFE_PORT

    本文转自:https://blog.csdn.net/testcs_dn/article/details/39186225 最近在用Nginx发布多个站点测试,使用了87.88端口, 88端口访问正常 ...

  10. 微信小程序组件minui在mac系统的使用注意事项

    1.mac系统使用npm 安装组件的时候,一定要注意mac系统的终端一定要用root用户操作. 具体的命令如下:sudo -i,然后提示输入系统的密码就进入了root操作用户. 2.然后就根据minu ...