系统

2020-07-19  本文已影响0人  谭英智

互斥锁

加锁如果已经有其他线程加锁了,则阻塞,如果有多个线程在等待锁的释放,在锁释放的时候,所有线程都会被唤醒并置为就绪状态,第一个变成就绪的线程又执行加锁,其他线程又会进入等待

自旋锁

不会阻塞,使用死循环在内存检测锁是否已经释放

读锁

例如一个链表,在一个线程读的时候,当然不允许其他线程写入链表

写锁

对于一个数据结构,只允许一个线程写入

递归锁

死锁

协程/线程/进程

协程

用户态的线程,切换由用户态管理,不需要经过内核

优点
缺点

线程

优点
缺点

进程

优点
缺点

进程间通讯

无名管道

优点
缺点

有名管道

优点
缺点:

消息队列

优点
缺点

信号

优点
缺点

socket

优点
缺点

共享内存

优点
缺点

守护进程

operactionsystem-process

脱离终端,shell终端可以执行其他命令

原理:父进程先于子进程退出,造成子进程成为孤儿进程,系统发现此孤儿进程,会把此进程收养到init进程下(1进程)

进程组:是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因组长进程的退出而受到影响

会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始与用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。

setsid函数作用:setsid函数用于创建一个新的会话,并担任该会话组的组长。摆脱原会话/进程组/控制终端的控制

由于上一部进程成为了一个新的会话的组长,会话组长是可以申请打开一个控制终端,通过再次fork子进程,父进程退出,会让子进程变成不是会话组长,将不能申请控制终端。

fork创建的子进程会继承父进程的当前工作目录,这回导致此工作目录不可卸载,所以需要把当前目录更改为根目录

fork的自己成会继承父进程的文件掩码,为了加大子进程的灵活性,最好把掩码设为0

fork的子进程会继承父进程的文件描述符,而这些文件描述符子进程永远也不会使用,如果不关掉,会造成资源浪费

上一篇 下一篇

猜你喜欢

热点阅读