描述
该函数对与 KEY 关联的信号量 ID 执行由 OPSTRING 定义的信号量操作。 OPSTRING 应该是 semop 结构的压缩数组,并且每个结构都可以生成。
用法
以下是此函数的简单语法 -
semop KEY, OPSTRING
返回值
此函数在失败时返回 0,成功时返回 1。
示例
以下是显示其基本用法、创建信号量并增加其值的示例代码 -
#!/usr/bin/perl -w
# Assume this file name is left.pl
use IPC::SysV;
#use these next two lines if the previous use fails.
eval 'sub IPC_CREAT {0001000}' unless defined &IPC_CREAT;
eval 'sub IPC_EXCL {0002000}' unless defined &IPC_EXCL;
eval 'sub IPC_RMID {0}' unless defined &IPC_RMID;
$key = 1066;
$| = 1;
$num = 0;
$flag = 0;
# Create the semaphor
$id = semget ( $key, 1, &IPC_EXCL|&IPC_CREAT|0777 ) or
die "Can't semget:$!";
foreach( 1..5) {
$op = 0;
$operation = pack( "s*", $num, $op, $flags );
semop( $id, $operation ) or die "Can't semop:$! ";
print "Left....\n";
sleep 1;
$op = 2;
$operation = pack( "s*", $num, $op, $flags );
# add 2 to the semaphore ( now 2 )
semop( $id, $operation ) or die "Can't semop $! ";
}
semctl ( $id, 0, &IPC_RMID, 0 );
使用 $left.pl& 在后台运行上面的程序并按照另一个程序编写。在这里,Left 将信号量设置为 2,Right 打印 Right 并将信号量重置为 0。这一直持续到 Left 完成其循环,然后用 semctl() 销毁信号量
#!/usr/bin/perl -w
# Assume this file name is right.pl
$key = 1066;
$| = 1;
$num = 0;
$flags = 0;
# Identify the semaphore created by left.
$id = semget( $key, 1, 0 ) or die ("Can't semgt:$!" );
foreach( 1..5) {
$op = -1;
$operation = pack( "s*", $num, $op, $flags );
# Add -1 to the semaphore (now 1)
semop( $id, $operation ) or die " Can't semop $!";
print "Right....\n";
sleep 1;
$operation = pack( "s*", $num, $op, $flags );
# Add -1 to the semaphore (now 0)
semop( $id, $operation ) or die "Can't semop $! ";
}
现在运行 right.pl,它将产生以下结果 -
Right.... Left.... Right.... Left.... Right.... Left.... Right.... Left.... Right.... Left....
相关用法
- Perl semget用法及代码示例
- Perl semctl用法及代码示例
- Perl setpriority用法及代码示例
- Perl send用法及代码示例
- Perl setpwent用法及代码示例
- Perl sethostent用法及代码示例
- Perl setgrent用法及代码示例
- Perl setsockopt用法及代码示例
- Perl seekdir用法及代码示例
- Perl setprotoent用法及代码示例
- Perl setnetent用法及代码示例
- Perl setservent用法及代码示例
- Perl select用法及代码示例
- Perl sin()用法及代码示例
- Perl split用法及代码示例
- Perl shmctl用法及代码示例
- Perl splice用法及代码示例
注:本文由纯净天空筛选整理自 Perl semop Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。