37,722
社区成员
发帖
与我相关
我的任务
分享
#!/usr/bin/perl
use strict;
use IPC::SysV qw(IPC_CREAT S_IRUSR GETVAL SETVAL);
our $id;
$id= semget(1234,0,0666|IPC_CREAT);
print "$id/n";
&setval();
my $kkk=&getval();
print $kkk;
while(1) {
&lock();
print "lock";
&setval();
print "unlock";
sleep (1);
}
sub lock()
{
my $oper = pack("s!s!s!",0,-1,0);
semop($id,$oper);
}
sub unlock()
{
my $oper = pack("s!s!s!",0,1,0);
semop($id,$oper);
}
sub getval()
{
my $kkk = semctl($id,0,GETVAL,0);
return $kkk;
}
sub setval()
{
semctl($id,0,SETVAL,1);
}
上面是小弟写的程序,但是执行的时候为什么进程就睡眠了?把while循环注销了就能正常运行了,平生第一次郁闷的碰到这个事情,明白的解释下$|=1;
即可。