消息队列
消息队列和共享内存都属于system V标准

创建消息队列:
system V信号量
铺垫:
共享内存:
让两个进程看到同一份资源来实现通信:
-
让两个进程看到同一份资源这是提供了通信前提
-
如果共享内存没有保护机制,会导致数据不一致
数据不一致的解决方案
- 信号量
保护机制保护的是谁?或者说约束的是谁?
- 临界区代码
- 保护临界区代码就是变相的保护临界资源
什么是临界区?
其实就是访问共享内存的代码段,这部分就是临界区


为什么会数据不一致?
-
存在没有被保护的共享资源
-
各自的代码,访问了这个没有被保护的公共资源
-
多个执行流(进程)能看到的同一份公共资源:共享资源
-
被保护起来的共享资源叫做"临界资源"
-
在进程中,涉及到互斥资源的程序段叫做临界区---即访问该资源的代码段
-
多个执行流访问资源时,具有一定顺序性,叫做同步
什么是互斥
任何时刻,只允许一个执行流访问资源,叫做互斥
在申请锁的时候,必须是原子的

没当一个执行流进入临界区时,就会申请锁,这说明锁本身也是共享的
那么谁来保证锁的安全?
- 申请锁的时候,必须是原子的
对共享资源进行保护实际上是对访问共享资源的代码进行保护
原子性是什么?
- 要么做,要么不做
信号灯,本质是一个计数器,用来表明临界资源中,资源数量的多少
