内容

名称

IPC::Semaphore - SysV 信号量 IPC 对象类

概要

use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR IPC_CREAT);
use IPC::Semaphore;

$sem = IPC::Semaphore->new(IPC_PRIVATE, 10, S_IRUSR | S_IWUSR | IPC_CREAT);

$sem->setall( (0) x 10);

@sem = $sem->getall;

$ncnt = $sem->getncnt;

$zcnt = $sem->getzcnt;

$ds = $sem->stat;

$sem->remove;

描述

一个提供基于对象的接口来访问 SysV IPC 信号量的类。

方法

new ( KEY , NSEMS , FLAGS )

创建一个与 KEY 关联的新信号量集。NSEMS 是信号量集中信号量的数量。如果满足以下条件,则会创建一个新的信号量集:

  • KEY 等于 IPC_PRIVATE

  • KEY 还没有与之关联的信号量标识符,并且 FLAGS & IPC_CREAT 为真。

在创建新的信号量集时,FLAGS 用于设置权限。注意不要设置 Sys V IPC 实现不允许的任何标志:在某些系统中,设置执行位会导致操作失败。

getall

以数组形式返回信号量集的值。

getncnt ( SEM )

返回等待信号量 SEM 大于其当前值的进程数量。

getpid ( SEM )

返回最后对信号量 SEM 执行操作的进程 ID。

getval ( SEM )

返回信号量 SEM 的当前值。

getzcnt ( SEM )

返回等待信号量 SEM 变为零的进程数量。

id

返回信号量集的系统标识符。

op ( OPLIST )

OPLIST 是要传递给 semop 的操作列表。OPLIST 是多个较小列表的串联,每个列表包含三个值。第一个是信号量编号,第二个是操作,最后一个是标志值。有关更多详细信息,请参阅 semop(2)。例如

    $sem->op(
	0, -1, IPC_NOWAIT,
	1,  1, IPC_NOWAIT
    );
remove

从系统中删除并销毁信号量集。

set ( STAT )
set ( NAME => VALUE [, NAME => VALUE ...] )

set 将设置与信号量集关联的 stat 结构的以下值。

uid
gid
mode (only the permission bits)

set 接受由 stat 方法返回的 stat 对象,或 name-value 对列表。

setall ( VALUES )

将信号量集中所有值设置为 VALUES 列表中给出的值。VALUES 必须包含正确数量的值。

setval ( N , VALUE )

将信号量集中第 N 个值设置为 VALUE

stat

返回类型为 IPC::Semaphore::stat 的对象,它是 Class::Struct 的子类。它提供以下字段。有关这些字段的描述,请参阅您的系统文档。

uid
gid
cuid
cgid
mode
ctime
otime
nsems

SEE ALSO

IPC::SysVClass::Structsemget(2)semctl(2)semop(2)

作者

Graham Barr <[email protected]>,Marcus Holland-Moritz <[email protected]>

版权

版本 2.x,版权所有 (C) 2007-2013,Marcus Holland-Moritz。

版本 1.x,版权所有 (c) 1997,Graham Barr。

本程序是自由软件;您可以在 Perl 本身相同的条款下重新发布和/或修改它。