一、创建一个线程,里面设置一个死循环,在销毁线程时间循环标志设置为false,并return,该线程是退出了,但是有没有将资源自动释放呢?

所遇问题:在多个视频循环播放的时候,程序运行十个小时左右并挂掉,提示创建线程失败,可能原因是在主线程退出之后该线程并没有释放资源,导致下次重新创建同一个线程而失败。


分析:linux线程执行有两种状态,分别是joinable状态和unjoinable状态,这与windows是有区别的;

1、如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符等,大概8K左右,只有当你调用了pthread_join之后这些资源才会被释放。

2、若是unjoinable状态的线程,所拥有的资源在线程函数退出时或pthread_exit时自动会被释放。

关于线程状态可以再创建线程的时候指定并设置,例如GThread* g_thread_create(GTreadFunc func, gpinter data, gboolean joinable, GError **error);

如果joinable设置为TRUE,则可以通过g_thread_join来结束线程。