同步和互斥
互斥:由于各个进程需要共享资源,而共享资源具有排他性。各个进程竞争使用这些资源,进程的这种关系称之为互斥。
这种一次只能被一个进程使用的资源称之为临界资源
访问临界资源的代码段称之为临界区。
同步:多个进程相互配合共同完成一项任务
进程间通信的目的:
数据传输:
资源共享:
通知事件:
进程间通信的发展:
管 道
SysV IPC 事实上的标准
POSIX
推荐看的书籍
1) UNIX网络编程卷2
2)Nginx
MySQL
Redis
MQ
进程间通信的分类:
文件
管道
SyStemV Ipc
消息队列
共享内存
信号量
POSIX IPC
条件变量
互斥量
读写锁
信号量
Socket
进程共享信息的三种方式:
基于文件系统
基于内核
基于共享内存的
IPC对象的持续性;
随进程持续
随内核持续
随文件系统持续
* 死锁*
多个进程相互等待对方资源,在得到所有资源继续运行
之前,不会释放自己已经得到的资源,这样造成了循环等待的现象,称之为死锁
死锁产生的必要条件:
它所产生的资源必须具有互斥性:
请求并保持:
不可剥夺:
形成环路等待:
防止死锁:
统一分配
可剥夺
有序分配
避免死锁:
经典死锁避免算法:银行家算法
1、客户向银行家申请贷款,贷款总额不超过银行家现有资金量,接纳该客户
2、客户可以分批次向银行贷款,但贷款总额不能超过开始的申请总量
3、当银行家现有的资金不能满足客户,可以在有限时间内给客户提供贷款
4、当客户得到所有资金后,在有限时间内归还
经典死锁案例:
哲学家就餐
信号量 semaphore
信号量 p v,网络 最短路径 goto是有害的
狄杰斯特拉