一、进程间的通信方式
1、pipe管道:场景Linux | 管道命令
2、信号signal:
3、消息队列Message:消息队列建立了一个链表,都是先进先出,消息队列是放在内核中的。只有在内和重启或者显式删除一个消息队列时,该消息队列才会真正被删除。
4、信号量:信号量是一个计数器,用于多进程对共享数据的访问,信号量意图在于进程间的同步。
5、共享内存:使得多个进程可以同时访问同一块内存,不同进程可以看到对方进程对共性内存的数据更新。但这种操作依然需要用互斥锁、信号量等。
6、套接字:在网络请求中使用套接字进行通信,套接字是支持TCP/IP的网络通信基本操作单元。
二、线程间同步的方式
1、互斥量Mutex:采用互斥对象机制
2、信号量:允许同一个资源,在同一时刻被多个线程同时访问。
3、事件:通过通知的方式保持同步,还可以实现多线程优先级。
三、死锁的四个必要条件
1、请求保持
2、循环等待
3、互斥
4、非抢占
四、预防死锁
设置可以抢占,破坏第四个必要条件
释放已有资源,破坏第一个条件
避免循环等待,等待过后,放弃等待。破坏第二个条件
五、避免死锁
可以允许死锁出现,像银行家算法,进行死锁探测,如果是安全状态就分配资源。