Linux多线程编程:对象同步之线程信号管理
来源:互联网 发布:淘宝美工待遇 编辑:程序博客网 时间:2024/06/05 15:35
在线程中也可以使用Linux的信号机制,此处简要介绍Linux线程信号管理函数。
1、pthread_kill 函数
pthread_kill函数用来在线程发送信号。
如果signo为0,就会进行错误检查而不发送信号。成功完成后,pthread_kill()将返回0。就会进行错误编号,用于指明错误。
2、pthread_sigmask函数
pthread_sigmask函数用来检查(或者更改)调用线程的信号掩码,pthread_sigmask()函数声明如下:
2
__sigset_t *__restrict __oldmask) __THROW;
1、SIG_BLOCK。所得的集合是当前集合与参数oldmask 指向的信号集的并集。
2、SIG_UNBLOCK。所得的集合是当前集合与参数oldmask指向的信号机的补集的交集。
3、SIG_SETMASK。所得到的集合是参数oldmask指向的信号集。
第二个参数newmask指向信号集的指针,将用于更改当前阻塞的信号集。
第三个参数oldmask是指向前一个信号掩码将返回的位置指针。
1、如果参数oldmask不是空指针,则前面的信号掩码将返回oldmask。
2、如果newmask是空指针,则参数how的值无关紧要,线程的信号掩码不会更改,因此,可以通过调用来查询当前阻塞的信号。
如果调用pthread_sigmask()后有未决的非阻塞信号,则在对pthread_sigmask()的调用返回之前,至少传送其中一个信号。
需要注意的是,要阻塞SIGKILL或者SIGSTOP信号是不可能的。这是系统强制执行的,而不会导致指明错误。成功完成后,pthread_sigmask()返回0。否则,返回错误编号来指明错误。如果由于某种原因pthread_sigmask()失败,线程的信号掩码将不会变化。
3、代码实例
下面是一个使用线程信号的简单实例,在此程序中,主线程向子线程发送了一个KILL信号,以使子线程结束。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using namespace std;
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void *test_program(void *arg);
int main(int argc, char *argv[])
{
int i;
pthread_t threadid;
void *status;
if(pthread_create(&threadid, NULL, test_program, NULL) > 0)
{
fprintf(stderr, "pthread_create failure\n");
exit(EXIT_FAILURE);
}
sleep(5);
printf("this is parent,send kill signal to thread %d\n", threadid);
if(pthread_kill(threadid, SIGKILL) != 0)
{
perror("pthread_kill");
exit(EXIT_FAILURE);
}
return 0;
}
void *test_program(void *arg)
{
int i;
for(i = 0;; i++)
{
sleep(1);
printf("this is child thread ,%d\n", i);
printf("wait for kill signal\n");
}
exit(EXIT_SUCCESS);
}
- Linux多线程编程:对象同步之线程信号管理
- Linux线程编程 - 多线程异步管理之信号
- Linux多线程编程之同步对象编程:线程信号量
- 多线程编程(12) - 多线程同步之 Semaphore (信号对象)
- linux多线程编程---线程同步之互斥锁
- Linux多线程编程之线程同步操作
- linux线程同步之信号
- 多线程编程(12) - 多线程同步之 Semaphore (信号对象)(转自万一博客)
- Linux多线程编程:用同步对象编程之互斥锁使用
- Linux多线程编程之同步对象编程:条件变量
- Linux多线程编程之同步对象编程:读写锁
- Linux多线程编程(二)线程同步之条件变量
- Linux多线程编程(三)线程同步之互斥量
- Linux多线程编程(四)线程同步之信号量
- Linux多线程编程之线程结合互斥锁实现同步
- Linux 多线程编程----线程见同步问题
- 多线程编程实例----线程同步之事件
- 多线程编程实例----线程同步之互斥量
- IOS类别
- Java-菜鸟学习之路(一)
- Android 普通线程里面执行UI线程
- poj-1054
- 云计算入门
- Linux多线程编程:对象同步之线程信号管理
- 初写makefile之连滚带爬
- 关于winform的appconfig的读写操作
- 30天自制操作系统之第一天
- AC自动机
- ZOJ 3804 YY's Minions(模拟)
- C++BUILDER的文件操作
- Oracle VM VirtualBox 虚拟机加载USB硬盘
- RailsCasts19 Where Administration Goes 管理员权限部署