13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

sub abump {if ($var == 0) {yield;$var++;}}my $t1 = new Thread \&abump;my $t2 = new Thread \&abump;for my $t ($t1, $t2) { $t->join}print "var is $var\n";这 段 代 码 总 是 打 印 2( 某 种 意 义 上 的 “ 总 是 ”), 因 为 我 们 在 看 到 数 值 为 0 后 决 定 增 加 数 值 ,但 在 我 们 增 加 之 前 , 另 外 一 个 线 程 也 在 做 一 样 的 事 情 。我 们 可 以 在 检 查 $var 之 前 用 一 个 微 乎 其 微 的 锁 来 修 补 这 个 冲 突 。 下 面 的 代 码 总 是 打 印 1:sub bump {lock $var;if ($var == 0) {yield;$var++;}}请 记 住 我 们 没 有 明 确 的 unlock 函 数 。 要 控 制 解 锁 , 只 需 要 增 加 另 外 一 个 嵌 套 的 范 围 层 次就 行 了 , 这 样 锁 就 会 在 范 围 结 束 后 释 放 。sub abump {463

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

Saved successfully!

Ooh no, something went wrong!