当前位置: 技术问答>linux和unix
程序卡在pthread_join()
来源: 互联网 发布时间:2017-03-16
本文导语: 我有一个主线程通过命令来创建和关闭多个子线程,但是不会超过32个,所以系统资源是肯定够得!具体步骤是这样 收到创建线程的命令,创建线程,线程时不断循环执行任务的,每次循环前检查标记flag[n](flag[n]为...
我有一个主线程通过命令来创建和关闭多个子线程,但是不会超过32个,所以系统资源是肯定够得!具体步骤是这样
收到创建线程的命令,创建线程,线程时不断循环执行任务的,每次循环前检查标记flag[n](flag[n]为整形数组,用来标记每个子线程是否需要结束)是否为1,如果不为1则自己结束。
收到关闭线程的命令,通过将标记flag[n]置为0,然后调用pthread_join()来等待该线程结束,知道该线程结束后在执行新的命令。运行一段时间后程序就卡在pthread_join()这里了。谁知道怎么回事。
收到创建线程的命令,创建线程,线程时不断循环执行任务的,每次循环前检查标记flag[n](flag[n]为整形数组,用来标记每个子线程是否需要结束)是否为1,如果不为1则自己结束。
收到关闭线程的命令,通过将标记flag[n]置为0,然后调用pthread_join()来等待该线程结束,知道该线程结束后在执行新的命令。运行一段时间后程序就卡在pthread_join()这里了。谁知道怎么回事。
|
看出来了,你那个代码应该不会,会不会是传进来的
void *handl( int *n) 的n的问题, 因为你不同线程的 n都是同一个buffer里面的,
你在 handl 的开头打印一下 n指向的地址,看看是不是不同线程用到都是同一个地址的数据。
如果是这样,就有可能导致子线程运行到 int m = *n 之前,主线程又已经修改了 n中到数据,m得到的不是对应到值,
void *handl( int *n) 的n的问题, 因为你不同线程的 n都是同一个buffer里面的,
你在 handl 的开头打印一下 n指向的地址,看看是不是不同线程用到都是同一个地址的数据。
如果是这样,就有可能导致子线程运行到 int m = *n 之前,主线程又已经修改了 n中到数据,m得到的不是对应到值,
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。