首页 > 代码库 > 线程创建偶尔失败问题
线程创建偶尔失败问题
一、创建一个线程,里面设置一个死循环,在销毁线程时间循环标志设置为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来结束线程。
线程创建偶尔失败问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。