加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX情形高级编程:线程和信号

发布时间:2016-10-29 22:06:49 所属栏目:Unix 来源:站长网
导读:副标题#e# 每个 线程 都有自己的 信号 屏蔽字,但是 信号 的处理是进程中所有 线程 共享的。这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变。这样如果一个信号选择忽略某个信

示例代码:

[cpp] view plaincopyprint?
01.#include <stdio.h>
02.#include <pthread.h>
03.#include <unistd.h>
04.#include <stdlib.h>
05.#include <signal.h>
06.
07.void sig_thread_func(int sig)
08.{
09. printf("sig_thread_func : sig = %dn", sig);
10.}
11.void sig_func(int sig)
12.{
13. printf("sig_func : sig = %dn",sig);
14.}
15.
16.void *func1(void *arg)
17.{
18. signal(SIGUSR1, sig_thread_func); //线程1先运行,设置了signal
19.
20. sigset_t set;
21. sigfillset(&set);
22. sigdelset(&set, SIGUSR1);
23. pthread_sigmask(SIG_SETMASK, &set, NULL);//线程1屏蔽了除了SIGUSR1外的所有信号
24.
25. printf("pthread 1 runn");
26. int i;
27. for(i = 0; i < 7; ++i)
28. {
29. printf("1...n");
30. sleep(1);
31. }
32. return 0;
33.}
34.void *func2(void *arg)
35.{
36. printf("pthread 2 runn");
37. int i;
38. for(i = 0; i < 7; ++i)
39. {
40. printf("2...n");
41. sleep(1);
42. }
43. return 0;
44.}
45.
46.int main()
47.{
48. pthread_t tid1, tid2;
49. pthread_create(&tid1, NULL, func1, NULL);
50. pthread_create(&tid2, NULL, func2, NULL);
51.
52. sleep(1);
53. signal(SIGUSR1, sig_func); //覆盖了线程1设置的signal
54.
55. //向线程1发送SIGUSR1,SIGUSR2
56. sleep(1);
57. pthread_kill(tid1, SIGUSR1);//调动handler
58. sleep(1);
59. pthread_kill(tid1, SIGUSR2);//屏蔽了,无响应
60.
61. //向线程2发送SIGUSR1,SIGUSR2
62. sleep(1);
63. pthread_kill(tid2, SIGUSR1);//调用handler
64. sleep(1);
65. //pthread_kill(tid2, SIGUSR2);//会终止进程,是进程!
66.
67. sigset_t set;
68. sigfillset(&set);
69. sigprocmask(SIG_SETMASK, &set, NULL);//进程屏蔽了所有信号
70.
71. sleep(1);
72. kill(getpid(), SIGUSR1);//调动handler?其实是线程1响应的
73.
74. pthread_join(tid1, NULL);
75. pthread_join(tid2, NULL);
76.
77. return 0;
78.}

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读