CSAPP笔记-2.3进程间通信IPC

竞争条件

定义:两个或者多个进程读写某些共享数据,而最后的结果取决于进程运行的时序的现象。

如何避免竞争条件:避免两个进程同时位于临界区中。

如何使得并发进程能够高效的运行:

  1. 不能同时位于临界区
  2. 不能对CPU的速度和数量做要求
  3. 临界区外的进程不得阻塞其他进程
  4. 进程不能无限期等待进入临界区

临界区

定义:对共享内存进行访问的程序片段。他不是一个区域,而是一个程序。

互斥

互斥:确保一个进程在使用一个共享变量或者文件的时候,其他进程不能进行同样的操作。

*** 互斥是避免竞争条件的手段 ***

实现互斥的方案

  1. 屏蔽中断法
  2. 锁变量法
  3. 严格轮换法
  4. Peterson解法
  5. 指令法(TSL或者XCHG)

以上的互斥方案都是基于忙等待的互斥,还有一种是非忙等待的互斥。

  • 忙等待:连续测试一个变量,直到某个值出现为止
  • 非忙等待的互斥:使用进程通信原语sleep&wakeup来使得进程睡眠和唤醒。
  • 原语:若干条指令构成的程序段,执行的时候不可以被中断,即:要么全部执行完毕,要么全部都不执行。
  1. PV操作
  • P操作:分配资源,信号量-1,如果结果<0,阻塞该进程放入等待队列并调度其他进程,否则进程继续执行。
  • V操作:释放资源,信号量值+1,如果信号量还是<=0,从等待队列中唤醒一个进程,否则进程继续执行。

PV操作和唤醒睡眠操作一样,同样是原语。

信号量与互斥量

  1. 信号量:系统中可以使用的资源个数
  2. 互斥量:不需要计数的信号量,简化版本。
    • 快速用户区互斥量

    • pthread的互斥量
      互斥量相关的pthread调用

    • pthread的另一种同步方式:条件变量(转CSAPP-线程笔记LINK)

管程

  1. 定义:一个由过程、变量、数据结构等组成的一个集合。进程在需要的时候调用管程中的过程。是一个模块、接口。
  2. 性质:任意时刻,管程中只能有一个活跃的进程。
  3. 实现:使用条件变量和wait signal操作。

管程互斥的实现由编译器负责,C语言不支持管程。

消息传递

  • 使用send&recieve原语进行发送和接受消息。
  • 信箱:一个用来对一定数量的消息进行缓冲的地方

屏障

  • 用于进程组的同步
  • 当所有进程到达屏障,则一起被释放,否则被挂起

其他IPC机制:RCU读-复制-更新机制

  • 优点:不需要加锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值