zoukankan      html  css  js  c++  java
  • perl semctl()函数

    转自:http://www.yiibai.com/perl/perl_semctl.html

    描述

    perl semctl()函数例子,semctl()函数实例代码 - 控制系统V信号量。


     

    语法

    semctl ID, SEMNUM, CMD, ARG

    定义和用法

    控制系统V信号量。 你将需要进口IPCSysV的模块,以获得正确的定义CMD。 该函数调用系统调用semctl()函数。

    返回值

    • undef - 失败时

    • 0 但真(true)成功时

    例子

    试试下面的例子:创建一个信号量,增加它的值

    #!/usr/bin/perl -w
    
    # Assume this file nam eis 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 - by www.yiibai.com
    $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& 背景,并写另一个程序。 在这里留下左键设置为2信号和右键打印右键和复位信号为0。这种情况持续下去,直到左键完成其循环后,它破坏了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....
  • 相关阅读:
    Java并发编程实战 第11章 性能与可伸缩性
    Lock的await/singal 和 Object的wait/notify 的区别(转载)
    线程阻塞和挂起(网络收集)
    Java并发编程实战 第10章 避免活跃性危险
    Java并发编程实战 第8章 线程池的使用
    Java并发编程实战 第6章 任务并行 第7章 取消与关闭
    Java并发编程实战 第5章 构建基础模块
    Java编程思想 第21章 并发
    Java并发编程实战 第4章 对象的组合
    Java并发编程实战 第3章 对象的共享
  • 原文地址:https://www.cnblogs.com/yiibaicom/p/2666934.html
Copyright © 2011-2022 走看看