哥弱弱的问个问题-----结贴。。
时间:2010-07-22
来源:互联网
- void thread_sig0(int sig){
- printf("thread_sig0\n");
- }
- void thread_sig1(int sig){
- printf("thread_sig1\n");
- }
- void thread_sig2(int sig){
- printf("thread_sig2\n");
- }
-
- void *thread1(void *arg) {
- signal(SIGINT, thread_sig1);
- while(1)sleep(1);
- }
-
- void *thread2(void *arg) {
- signal(SIGINT, thread_sig2);
- while(1)sleep(1);
- }
-
- int main()
- {
- pthread_t ta, tb;
- signal(SIGINT, thread_sig0);
- pthread_create(&ta, NULL,thread1, NULL);
- sleep(1);
- pthread_create(&tb, NULL, thread2, NULL);
- return 0;
- }
补充一下,我主要想明白, 下面2点
1.线程之间的信号处理函数是否是共享的?(APUE上是)
2.不是共享的话,那结果是什么? 是共享的话,我的这边为什么老是打印出thread_sig1呢。。
弄明白了,在两个线程创建之间加了个sleep(1);..发现是因为先创建的线程,未必先运行。。。
导致最后实际注册的处理函数是thread1,结贴。。
作者: peidright 发布时间: 2010-07-22
作者: rain_fish 发布时间: 2010-07-22
[root@localhost test]# ./signal
thread_sig2
thread_sig2
thread_sig2
thread_sig2
thread_sig2
作者: rain_fish 发布时间: 2010-07-22
大家帮忙在自己的平台运行下,做下解释。。 我的结果是,总是第一个线程收到信号。。
作者: peidright 发布时间: 2010-07-22
回复 rain_fish
我的总是第一个线程 thread_sig1..如果是thread_sig2,应该可以解释通。。
请问你的机器情况,多核,? 64? linux?
作者: peidright 发布时间: 2010-07-22
我的总是第一个线程 thread_sig1..如果是thread_sig2,应该可以解释通。。
请问 ...
peidright 发表于 2010-07-22 10:23
对,多喝,64,linux
作者: rain_fish 发布时间: 2010-07-22
代码加了2个sleep..能否粘贴代码,再测试下。。
作者: peidright 发布时间: 2010-07-22
作者: syno_hu 发布时间: 2010-07-22
代码加了2个sleep..能否粘贴代码,再测试下。。
peidright 发表于 2010-07-22 10:35
呵呵,一开始我就加了sleep,可不像你那么浪费cpu
作者: rain_fish 发布时间: 2010-07-22
。。。谁都知道看。。请你发帖之前,认真看贴好么。我这边结果,总是第一个线程。。这样是不正常的。没法解释。
作者: peidright 发布时间: 2010-07-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28