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

2021/12/15 7:17:50

本文主要是介绍游双-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判断:

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



这篇关于游双-Linux高性能服务器编程笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程