LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 938|回复: 2

线程的signal handle只能带一个参数?不能传数据

[复制链接]
发表于 2005-5-14 09:43:51 | 显示全部楼层 |阅读模式
我有一组全局指针:char *ptr1, ptr2,=malloc(),这些指针从程序开始到结束时都是 有效的。
然后启动一组线程对这些指针数据进行编辑pthread_create(pthread_id1, &routine, ptr1)...
我想在每个线程里安装某信号的处理函数,该函数要对该线程的ptr进行修改
问题是:
信号处理 函数不能传参数啊!就是不能给信号处理函数传ptr参数!

我想过用线程私有数据,把每个线程的ptr作为线程的私有数据然后在信号处理函数里就可以得到了该ptr了。不过这样当线程结束时就会释放调私有数据的内存(ptr),以后就无效了。

有没有好的办法啊,我看大家不给信号处理函数传参数也用得好好的。
发表于 2005-5-16 10:49:08 | 显示全部楼层
首先要保证你的子线程不共享主线程的信号处理器,在__clone系统调用时不使用CLONE_SIGHAND标记。
另外每个子线程采用不同的进程ID也就是不使用CLONE_PID标记。
如此你就可以用kill向每个不同的线程发送各种不同的信号,激活相应的信号处理函数了。
这时候,每个不同的PID就可以对应不同的你所说的“ptrX”。因为ptrX是全局的,所以不用担心每个线程无法访问的情况发生。
回复 支持 反对

使用道具 举报

发表于 2005-5-16 11:05:20 | 显示全部楼层
厉害,学习中。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表