游双-Linux高性能服务器编程笔记

#define MAX_THREADS 1
class Test {
public:
Test(): m_stop(false), s("Object exists.") {
printf("ctor\n");
m_threads = new pthread_t[MAX_THREADS];
for (int i = 0; i < MAX_THREADS; i++) {
pthread_create(m_threads + i, NULL, worker, this);
pthread_detach(m_threads[i]);
}
}
~Test() {
delete [] m_threads;
m_stop = true;
}
private:
static void* worker(void* arg) {
printf("%Thread running\n");
auto t = (Test*)arg;
// while (!t->m_stop) {
while (1) {
printf("Hello from %d, %p\n", pthread_self(), t);
printf("%s\n", t->s.c_str());
sleep(1);
}
}
private:
pthread_t* m_threads;
bool m_stop;
string s;
};
int main() {
Test* t = new Test;
sleep(5);
delete t;
printf("dtor done\n");
sleep(5);
}

输出结果:

![](https://gitee.com/ara_zzy/PicGo/raw/master/img/20211214210631.png

对象已经被释放,但是线程依然持有指向那个地址的指针,非常恐怖

如果使用m_stop判断:

正常,但是感觉还是有风险。

posted @   macguz  阅读(439)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示