进程间的作用
- P、V操作不能实现共享
- PV操作不足
- 不易读懂
- 不利于修改和维护
- 正确性难以保证
- 可以用于线程tm的
进程间的同步
- 同步:一个进程在等待另一个进程给它发送消息 一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定速度执行的过程称为进程间的同步
进程间的互斥
- 解决进程互斥的方法:
- 竞争各方平等协商
- 设置进程管理者
管程
概念及组成
管程内使用的对象是,共享数据结构、一组操作过程
通过连接两个进程的一个打开的共享文件,可以实现进程间的数据通信
- 主要特性
- 管 程 中 的 共 享 变 量 在 管 程 外 部 是 不 可 见 的 , 外 部 只 能 通 过 调 用 管 程 中 所 说 明 的 外 部 过 程 ( 函 数 ) 来 间 接 地 访问 管 程 中 的 共 享 变 量 ,
- 任 一 时 刻 管 程 中 只 能 有 一 个 活 跃 进 程 , 规 定 管 程 互 斥 进 入 ,
- 管 程 通 常 是 用 来 管 理 资源 的 , 在 管 程 中 应 当 设 有 进 程 等 待 队 以 及 相 应 的 等 待 及 唤 醒 操 作 。
- 管 程 是 编 程 语 言 的 组 成部 分 , 可 以 米 用 与 其 他 过 程 调 用 不 同 的 方 法 来 处 理 对 管 程 的 调 用 。
- 进 人 管 程 时 的 互 斥 由 编译 器 负 责 , 通 常 是 用 一 个 互 斥 量 或 二 元 信 号 量 。
- 一次只能由一个进程可以在管程中活动
- 管程的互斥是由管程本身性能决定的,不是PV
- 管程可以实现互斥,但无法保证互斥
条件变量
- 引 入 条 件 变 量 以 及 相 关 的 两 个 操 作 wait 和 signal 其 目 的 是 进 程 在 无 法 继 续 运 行 时 调 用 进 程 自 身 阻塞。
- 当 一 个 管 程 过 程 无 法 继 续 运 行 时 , 会 在 某 个 条 件 变 量 ( 如 fu 围 上 执 行 wait 操 作 , 导 致 调 用 进 程 自 身 阻 塞 , 并 且 还 将 另 一 个 以 前 等 在 管 程 之 外 的 进 程 调 入 管 程 。
- 另 一 个 进 程 可 以 唤 醒 正 在 睡 眠 的 伙 伴 进 程 , 可 以 通 过 对 其 伙 伴 正 在 等 待 的 一 个 条 件 变 量 执 行 signal 完 成 。
- P 等 待 Q 继 续 , 直 到 Q 退 出 或 等 待 (Hoare 提 出 )。
- Q 等 待 P 继 续 , 直 到 P 等 待 或 退 出 。
- 规 定 唤 醒 为 管 程 中 最 后 一 个 可 执 行 的 操 作(BrinchHansen 提 出 ) 。
- Pthread中的互斥与同步
- Pthread_join函数是等待一个特定的线程退出
- 消息缓冲通信机制
- 管道方式的缺点通信速度慢
- 共享内存适合大量传送信息