日期:2014-05-16  浏览次数:21434 次

程序卡在pthread_join()
我有一个主线程通过命令来创建和关闭多个子线程,但是不会超过32个,所以系统资源是肯定够得!具体步骤是这样

收到创建线程的命令,创建线程,线程时不断循环执行任务的,每次循环前检查标记[color=#FF0000][/color]flag[n](flag[n]为整形数组,用来标记每个子线程是否需要结束)是否为1[color=#FF0000][/color],如果不为1则自己结束。

收到关闭线程的命令,通过将标记flag[n]置为0,然后调用pthread_join()来等待该线程结束,知道该线程结束后在执行新的命令。运行一段时间后程序就卡在pthread_join()这里了。谁知道怎么回事。

------解决方案--------------------
看出来了,你那个代码应该不会,会不会是传进来的 
void *handl( int *n) 的n的问题, 因为你不同线程的 n都是同一个buffer里面的,
你在 handl 的开头打印一下 n指向的地址,看看是不是不同线程用到都是同一个地址的数据。

如果是这样,就有可能导致子线程运行到 int m = *n 之前,主线程又已经修改了 n中到数据,m得到的不是对应到值,