nebula2005
关于线程问题.
请教各位,这样使用线程的全局变量是否有合理?是否有隐患???
主进程main 需要开启多个线程.但是需要开启多少个为不固定情况.
在main中定义一个线程的全局变量, pthread_t p_thid,然后封存一个数据结构.(链表,都有一个p_thid这样的成员)
typedef struct _a_
{
char name[512];
pthread_t p_thid;
}a;
每次接收到要新建线程信息时, 先malloc,保存到链表一份.
然后调用.pthread_create( &p_thid, NULL, test1, NULL);并把a.p_thid = p_thid;
这样多次调用创建线程的函数.pthread_create( &p_thid, NULL, test1, NULL); (多次使用同一个线程全局变量p_thid来创建线程.)
并把other.p_thid = p_thid;
也就是 添加, A, B, C, D,...多个链表节点,都保存了同一个线程变量 p_thid, 但是他们的线程id,不同.
这样在main进程中,遍历链表应该就可以根据name 找到开启的线程的所有id,
我做过试验,每次创建的id,%d打印,都是非常大的负数(但是id的确都不相同)....不明白为什么会是这样. 例如: id -1219376240
想请问一下各位高手,我这样使用是否合理??
如果合理,那么想在请问一下,我想给每个后台运行的线程单独发信号,
比如:想在main,中能够单独给某一个后台运行的线程发送停止信号,而不影响到其它线程.如何入手??线程的设置属性中,没有提到关于信号的设置.
第二个问题是:
当后台运行这样的线程收到让自己停止的信号后,不能马上停止,(也就是main不能直接kill掉).需要后台线程自己处理完某些动作后,才自己退出,并释放自己的资源.
同时,像这种应用情况,线程应该使用非分离模式的吧?如果是分离的,那么main退出后其它后台线程如何得知??
没有头绪...寻求帮助.
tassard
1.想请问一下各位高手,我这样使用是否合理??
你创建和使用链表的方法是对的
2.想在main,中能够单独给某一个后台运行的线程发送停止信号,而不影响到其它线程.如何入手?
你是说信号机制?能不能用条件变量通知线程?线程得到通知后让它去检查一个全局变量来确定是否在通知自己?
3.同时,像这种应用情况,线程应该使用非分离模式的吧?如果是分离的,那么main退出后其它后台线程如何得知??
如果main退出所有线程都会结束,所以要使用汇合模式让main等待各个线程。