linux 创建了一个线程,如果没有停止线程。这个线程为循环跑?还是截止?

linux 创建了一个线程,如果没有停止线程。这个线程为循环跑?还是截止?,第1张

除非你的线程函数内部有循环,否则哪来的什么循环跑,

你的线程函数返回了,线程就结束了

——当然,你需要回收线程资源。

void *ThreadFunc(void *)

{

printf("Hello world\n")

return NULL

}

例如这样的线程函数,它输出Hello world后,返回了,线程就结束了。

多线程程序中,特别是频繁申请,释放线程的情况下,就要注意线程的关闭,最好使用线程池。

一,线程退出方式

(1) 执行完成后隐式退出;

(2) 由线程本身显示调用pthread_exit 函数退出;

pthread_exit (void * retval)

(3) 被其他线程用pthread_cance函数终止:

pthread_cance (pthread_t thread)

二,线程状态

pthread 线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默认为joinable。

joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈,线程描述符等(有人说有8k多,未经验证)。

detachable:线程结束时会自动释放资源。

joinable 线程执行完后不使用pthread_join的话就会造成内存泄漏。

解决办法:

1、创建线程前设置 PTHREAD_CREATE_DETACHED 属性

pthread_attr_t attr

pthread_t thread

pthread_attr_init (&attr)

pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED)

pthread_create (&thread, &attr, &thread_function, NULL)

pthread_attr_destroy (&attr)

2、当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。

3、当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self())来分离自己。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8493002.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存