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.

$self->put($value);return $self;}下 面 是 抓 取 和 存 储 方 法 。get 和 put 方 法 锁 住 缓 冲 区 , 但 是 peek 和 poke 不 会 , 因 此后 面 两 个 只 有 在 对 象 被 手 工 锁 住 的 时 候 才 能 用 —— 当 你 想 检 索 一 个 旧 的 数 值 并 且 存 回 一 个修 改 过 的 数 值 , 并 且 所 有 都 处 于 同 一 把 锁 的 时 候 你 就 必 须 手 工 上 锁 。 演 示 程 序 在 它 的 while(1) 循 环 里 做 这 些 工 作 。 整 个 事 务 必 须 在 同 一 把 锁 里 面 发 生 , 否 则 测 试 和 设 置 就 不 可 能 是 原子 化 的 , 并 且 可 能 爆 炸 。sub get {my $self = shift;$self->lock;my $value = $self->peek(@_);$self->unlock;return $value;}sub peek {my $self = shift;shmread($self->{SHMKEY}, my $buff=' ', 0, MAXBUF) or die "shmread: $!";substr($buff, index($buff, "\0")) = ' ';return $buff;}sub put {my $self = shift;$self->lock;440

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

Saved successfully!

Ooh no, something went wrong!