请教关于pthread_join函数卡住的问题
c语言吧
全部回复
仅看楼主
level 7
luckerne
楼主
功能描述:通过pthread_create创建一个线程,执行线程中相应的代码,一定时间后调用pthread_join函数关闭创建的线程。因为需要,这个创建和关闭的过程需要循环执行,实际情况是循环150几次后再次关闭线程时整个程序就会卡在pthread_join函数中了(通过printf定位的),部分代码如图,请大神们指点一下
2013年10月17日 08点10分
1
level 11
绅士的绅士君
pthread_join函数是等待线程退出的吧?没算错的话,你那个FS_Taskled线程函数中的usleep函数调用是睡眠3秒,也就是说,pthread_join函数要等那个线程在3秒后退出时,才停止等待。
2013年10月17日 08点10分
2
绅士的绅士君
如果不是在线程里调用pthread_join函数等待自己退出,应该不会使整个程序卡住很长时间。
2013年10月17日 08点10分
luckerne
实际卡住是很久的时间没反应,至少半个小时没点反应,就停留在pthread_join这个函数中了
2013年10月17日 08点10分
level 7
luckerne
楼主
pthread_join是等待线程退出,g_ledFlag=0的目的就是使FS_Taskled线程的while循环结束后退出线程。对于usleep的3秒钟实际运行情况创建和关闭间隔了8秒是足够的了,而且如果真的出现pthread_join等待线程结束,但线程还在usleep,那也应该等几秒钟pthread_join可以正常回收线程资源吧?
2013年10月17日 08点10分
3
绅士的绅士君
再贴详细点的代码。
2013年10月17日 09点10分
level 7
luckerne
楼主
其实在整个程序中,确实是通过一个‘线程A’调用两大块函数,一块函数负责创建线程,一块负责关闭线程,关闭线程都是上述方式,while的标志位置0后,使用pthread_join等待线程结束。而且关闭过程中还会关闭‘线程A’本身,但是现在卡住不再关闭‘线程A’的pthread_join函数,而在这个led的线程关闭处。
2013年10月17日 09点10分
4
luckerne
而且这样的循环过程是可以创建-关闭线程150次的样子都正常完成,对于这样的次数过多的问题,我之前有遇到open函数打开文件不close文件,重复多次会出错的情况,但这里我不知道会有什么类似的情况
2013年10月17日 09点10分
level 13
小_埃
目测99%因为线程函数中出现了死循环,仔细检查你的线程函数,尤其是在已经卡死的情况下,用调试器查看线程的EIP
2013年10月17日 09点10分
5
level 7
luckerne
楼主
回复 绅士的绅士君 :代码比较多一下都不好简化,看到我楼下的描述了吗?在这样的情况下会有哪些可能性导致pthread_join函数卡住呢
2013年10月17日 09点10分
6
1