笔者:YY同学
文章目录
什么是 IPC 问题?
IPC(Inter Process Communication)问题是进程或线程之间相互通信时可能会发生的一系列问题,一般是共享数据的读写冲突问题。通常情况下,对于共享数据,我们希望在某个时刻只有一个进程(线程)在操作(增、删、查、改)它,这就意味着此时其他进程(线程)无法进入该数据域,这种性质就是互斥性(Mutual Exclusion),而该数据域又称冲突域(Critical Section),IPC 问题大多数是解决冲突域的问题,解决方案需要具备良好的互斥性。
冲突域(Critical Section)
冲突域是指代码中可能存在读写冲突且含有共享变量的区域。上图表示的是 IPC 问题的一般解决思路,由进入冲突、冲突部分和退出冲突三个部分的代码块组成。其中,在冲突部分中实现单进程(线程)的读写会比较安全,这意味着这一过程将没有其他进程(线程)参与。
IPC 问题解决方案必须满足的四大准则
内容 | 现实生活中的例子 | |
---|---|---|
准则一 | 没有两个进程(线程)可以同时进入冲突域 | 公共厕所单人隔间不可能同时进去两个人 |
准则二 | 冲突域中的进程(线程)不能决定 CPU 处理速度以及限定 CPU 的 个数 | 你无法预计你上厕所需要多久,而且你也不知道自己的排放量是多少 |
准则三 | 当进程(线程)离开冲突域后不能将冲突域锁住,换言之此时其他进程(线程)要能够进入冲突域 | 当你上完厕所后你不能把厕所门锁上然后*出去,这样虽然厕所里并没有人在使用它,但其他人也无法进入 |
准则四 | 没有进程(线程)可以永久占用冲突域,没有进程(线程)需要在进入冲突域前永久等待 | 你不可能一直呆在厕所里,在外面等你的人也不能一直在外面等你 |
五种 IPC 问题解决方案
解决方案一:禁用中断
- 描述:在冲突域内部禁止使用上下文切换。
- 优点:可以杜绝其他进程(线程)对进入冲突域的执行进程(线程)的干扰。
- 缺点:当有进程(线程)进入冲突域之后,会对所有进程进行强制中断。
- 评价:该解决方案虽然能达到目的,但是缺乏限制,太过随意。
解决方案二:添加