多线程 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

最新文章

  1. Redmine性能测试
  2. C++ 箴言
  3. 『TCP/IP详解——卷一:协议』读书笔记——11
  4. 关于MYSQL数据库安装方式及相关设置简要说明
  5. SimPholders Xcode快速访问沙盒
  6. php加速运行优化
  7. AJAX-----02远古时期的ajax
  8. mysql update中需要根据条件列更新写法update case
  9. Select Statement Syntax [AX 2012]
  10. junit4 javaee 5.0 jpa SSH 单元测试问题集锦
  11. UVa 11178 (简单练习) Morley&#39;s Theorem
  12. Squid代理服务器&amp;&amp;搭建透明代理网关服务器
  13. angularjs中sortable的使用
  14. sql递归查询语句
  15. Treblecross 博弈SG值
  16. Linux read line
  17. BZOJ.3653.谈笑风生(长链剖分/线段树合并/树状数组)
  18. html表格的基本用法
  19. linux telnet命令
  20. mysql常用参数监控

热门文章

  1. Docker基础命令和时区问题
  2. 【Kafka专栏】-Kafka从初始到搭建到应用
  3. asp.net core 系列 12 选项 TOptions
  4. 产品研发团队如何融合OKR与Scrum敏捷开发?
  5. SpringBoot+gradle项目构建war
  6. linux添加C#运行环境
  7. Shell从入门到精通进阶之三:表达式与运算符
  8. Perl进程间数据共享
  9. [Go] golang连接redis测试
  10. 杂牌机搞机之旅(一)——获得root权限(刷入magisk)