13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

# 和 以 前 一 样}如 果 你 有 函 数 原 形 , 它 放 在 名 字 和 任 意 属 性 之 间 :sub frob ($) : locked {# 和 以 前 一 样}17.2.2.5. 锁 定 方 法在 子 过 程 上 自 动 加 锁 的 特 性 是 非 常 棒 的 , 但 有 时 候 杀 伤 力 太 大 。 通 常 来 说 , 当 你 调 用 一 个 对象 方 法 时 , 是 否 有 多 个 方 法 同 时 运 行 并 没 有 什 么 关 系 , 因 为 它 们 都 代 表 不 同 的 对 象 运 行 。 因此 你 真 正 想 锁 住 的 是 其 方 法 正 在 被 调 用 的 那 个 对 象 。 向 该 子 过 程 里 增 加 一 个 method 属 性可 以 实 现 这 个 目 的 :sub frob : locked method {# 和 以 前 一 样}如 果 它 被 当 作 一 个 方 法 调 用 , 那 么 正 在 调 用 的 对 象 被 锁 住 , 这 样 就 可 以 对 该 对 象 进 行 串 行 访问 , 但 是 允 许 在 其 他 对 象 上 调 用 该 方 法 。 如 果 该 方 法 不 是 在 对 象 上 调 用 的 , 该 属 性 仍 然 力 图做 正 确 的 事 情 : 如 果 你 把 一 个 锁 住 的 方 法 当 作 一 个 类 方 法 调 用 (Package->new 而 不 是$obj->new), 那 么 包 的 符 号 表 被 锁 住 。 如 果 你 把 一 个 锁 住 的 方 法 当 作 普 通 子 过 程 调 用 ,<strong>Perl</strong> 会 抛 出 一 个 错 误 。17.2.2.6 条 件 变 量条 件 变 量 允 许 一 个 线 程 放 弃 处 理 器 , 直 到 某 些 条 件 得 到 满 足 。 当 你 需 要 比 锁 能 提 供 的 更 多 控制 机 制 的 时 候 , 条 件 变 量 是 在 线 程 之 间 提 供 协 调 的 点 。 另 一 方 面 , 你 并 不 需 要 比 锁 有 更 多 过荷 的 东 西 , 而 条 件 变 量 就 是 带 着 这 些 思 想 设 计 的 。 你 只 是 用 普 通 锁 加 上 普 通 条 件 。 如 果 条 件失 败 , 那 么 你 必 须 通 过 cond_wait 函 数 采 取 特 殊 的 措 施 ; 但 是 我 们 很 有 可 能 能 成 功 , 因为 在 一 个 设 计 良 好 的 应 用 里 , 我 们 不 应 该 在 当 前 的 条 件 上 设 置 瓶 颈 。除 了 锁 和 测 试 , 对 条 件 变 量 的 基 本 操 作 是 由 发 送 或 者 接 收 一 个 “ 信 号 ” 事 件 ( 不 是 %SIG 意义 上 的 真 正 的 信 号 ) 组 成 的 。 你 要 么 推 迟 你 自 己 的 执 行 以 等 待 一 个 事 件 的 到 来 , 要 么 发 送 一467

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!