操作系统--进程间通信和死锁

线程同步和进程通信有什么区别?进程间的通信方式有哪些?

线程同步:由于多线程共享地址空间和数据空间,所以多个线程间的通信是一个线程的数据可以直接提供给其他线程使用,而不必通过操作系统(内核的调度)。

进程通信(IPC):是指不同进程之间传播或交换信息。数据空间的独立性决定了它需要通过操作系统来实现。

一、管道:普通管道是半双工的(即数据只能在一个方向上流动),它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。而命名管道也是半双工的通信方式,它允许无亲缘关系的进程间进行通信

二、信号量是一个计数器,用来控制多个进程对资源的访问,它通常是一种锁,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

三、消息队列是消息的链表,存放在内核中并由消息队列标识符标识。

四、信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

五、共享内存是一段能被其它进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。

什么是死锁?死锁产生的条件?

死锁是两个或多个进程无限期的阻塞、相互等待的一种状态。如下图:多进程抢占资源

进程A获得了锁1,进程B获得了锁2,这时进程A调用lock试图获得锁2,结果是需要挂起等待进程B释放 锁2,而这时进程B也调用lock试图获得锁1,结果是需要挂起等待进程A释放锁1,于是进程A和B都永远处于挂起状态了,死锁再次形成。 

死锁产生的四个条件(有一个条件不成立,则不会产生死锁)

  • 1.互斥条件:一个资源一次只能被一个进程使用

  • 2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放

  • 3.不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺

  • 4.循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

猜你喜欢

转载自blog.csdn.net/weixin_39003229/article/details/81943694
今日推荐