命名管道
mkfifo filename
创建管道
共享内存
systemV
就是一段内存映射到两个进程之中,这段内存就是双方都可以看到同一块公共空间,变具备了进程间通信的前提条件。把映射去掉,然后释放空间,这就是释放共享内存。
共享内存属于操作系统,也是先描述再组织。理解共享内存=共享内存块+共享内存对应的内核数据结构。
shmget创建共享内存。
形成再在shmget里面填充的key值
当进程结束进程还存在 ipcs -m查看共享内存资源,因为他的生命周期随内核。不删就会随着操作系统一直存在所以需要手动删除,或者代码删除
我们需要删除共享内存
ipcrm -m id 号
代码删除
删除的话最后一个属性不需要关注。//共享内存大小最好是页(page:4096)的大小整数倍。
这个里面有一个perms代表权限,0代表没有权限读取共享内存。共享内存映射到系统叫attach。去掉叫detach.
进程通信的本质不同的进程是看到同一份资源,比如管道,共享内存,但是这也带来了一个时序问题,造成数据不一致。
1.把多个进程看到的同一份资源成为临界资源。
2.把自己进程,访问临界资源的代码成为临界区。
3.为了更好的进行进阶区的访问,可以让多执行流,在访问时候的时候,任何适合,都只能有一个进程进入临界区——互斥。每一个进程进入临界资源的时候,都需要先申请信号量。
这时候就要设计一个叫信号量的东西了。
所以多个执行流,执行的时候会互相干扰。在非临界区是不影响的。