信号、线程、信号量

一、常用信号:
信号宏名 说明 系统默认处理方式
SIGALRM 超时,调用alarm函数时产生 终止
SIGINT 终止进程(Ctrl+c) 终止
SIGKILL 无条件终止一个进程,不可以被捕获 终止

Kill()函数:
表头文件:
#include<sys/types>
#include<signal.h>

定义函数:int kill(pid_t pid, int sig)

函数说明:kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:
pid>0 将信号传给进程识别码为pid的进程
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号像广播般传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid绝对值的所有进程

返回值:执行成功返回0;有错则返回-1
在这里插入图片描述

程序说明:10秒后重启
在这里插入图片描述
在这里插入图片描述

程序说明:利用alarm函数来终止进程

二、信号处理的三种方式
(1)忽略
(2)执行用户需要执行的动作(捕获)
(3)默认处理

三、设置信号处理方式
调用signal函数来设置信号的处理方式

四、线程
线程是任务调度和执行的基本单位。

进程实现多任务的缺点:
(1)进程间切换的计算机资源开销很大,切换效率非常低
(2)进程间数据共享的开销也很大

线程和进程的关系:
(1)线程是进程的一个执行单元,是进程内可调度实体,比进程更小的独立运行的基本单位。
(2)同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
(3)进程退出,进程中所有线程全部退出
(4)线程不可能完全替代进程

线程的创建:pthread_create函数
返回值:创建成功返回0;有错误则返回非0值。

线程的退出:
(1)return 0;不会弹栈
(2)主动退出:pthread_cancel函数,需要发生系统调用才能使用该函数。
(3)pthread_exit函数,会弹栈。

注册线程退出函数
pthread_cleanup_push
pthread_cleanup_pop
必须成对出现

线程等待:
目的是为回收次线程或子线程的资源。

线程的状态:
(1)可结合状态;不能被其他进程或线程回收资源,只能通过pthread_join去回收。
(2)分离态;执行完之后,系统会自动回收。

线程和进程的区别:
(1)进程空间天然独立,因此进程间资源的保护是天然的,需要关心的是进程间的通信功能
(2)多线程天然共享进程的空间,因此线程数据共享是天然的,需要关心的是线程的资源保护。

提供线程资源保护的机制:
(1)互斥锁
(2)线程信号量
使用步骤:s1、定义信号量集合,sem_t sem[n],n为常数;
s2、初始化信号量;sem_init(&sem[0],int pshared,unsigned int value)
参数说明:pshared: +0:给线程使用;+ !0:可以给进程使用(一般不使用)
value:初始值,一般为1;
s3、p、v操作;
p操作: 函数原型#include <semaphore.h>
int sem_wait(sem_t *sem)//阻塞P操作
功能:阻塞p操作集合中某个信号量,值-1
v操作:int sem_post(sem_t *sem);
功能:对某个信号进行v操作,v操作不存在阻塞问题。V操作成功后,信号里的值会+1
返回值:成功返回0,失败返回-1

五、条件变量
条件变量的作用:多线程配合工作时,当线程检测到某条件不满足时就休眠,直到别的线程将条件准备好,然后通过条件变量将其唤醒。

条件变量使用步骤:
S1、定义条件变量:pthread_cond_t
S2、初始化: (1)int pthread_cond_init();
(2)定义时直接初始化:pthread_cond_t cond=PTHREAD_COND_INITIALIZER
S3、等待条件的函数: int pthread_cond_wait();
唤醒条件函数:int pthread_cond_signal(pthread_cond_t *cond)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值