这到底是为什么?perl semaphore
时间:2011-09-05
来源:互联网
Perl code
#!/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循环注销了就能正常运行了,平生第一次郁闷的碰到这个事情,明白的解释下
作者: kangqi7000 发布时间: 2011-09-05
自己顶下,$id= semget(1234,0,0666|IPC_CREAT);这里可以修改成$id= semget(1234,1,0666|IPC_CREAT);
作者: kangqi7000 发布时间: 2011-09-05
我知道问题在sleep那里,可是这是为什么呢?
作者: kangqi7000 发布时间: 2011-09-05
信号量是用来同步 异步程序 对 资源的访问/执行的。所以,你要想测试信号量,你需要使用多线程/多进程来测试。
建议你先看看Unix编程相关的书,理解了信号量之后再实践!
建议你先看看Unix编程相关的书,理解了信号量之后再实践!
作者: fibbery 发布时间: 2011-09-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28