`
东边日出西边雨
  • 浏览: 262719 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

perl的进程间同步互斥机制(信号灯集)

    博客分类:
  • perl
阅读更多

      perl里面也有SystemV的进程间通信/同步机制,和用C语言写的程序类似。 工作中用到了perl的进程间通信机制,其实只用到了二元信号灯而已,实现非常简单。

 

      我用到的模块是: IPC::SysV 和 IPC::Semaphore 首先需要创建信号灯集对象,如下:

 

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

 

       $sem就是信号灯集对象,new()方法中的S_IRUSR S_IWUSR等标志位是由IPC::SysV模块导出的,如果不导出这些标志位就使用,不会报错!但是没有作用!

 

       创建好了对象,你就可以使用对象的方法了,常用的方法无非就是“初始化信号灯集”,“读信号灯集的值”,“操作信号灯集的值”,“删除信号灯集”。

      初始化信号灯集 方法有: setall setval

      读信号集的值 方法有: getall getval

      操作信号灯集 方法有: op

      删除信号灯集 方法有: remove 还有一些别的方法,我没用过就不是很了解了。

 

      创建对象时,1参数为信号灯集名称,2参数为信号灯数量,3参数为标志位。 创建对象时,如果'1234'这个信号灯集已经存在,那么返回已存在的信号灯集,这种情况下如果设置了IPC_EXCL标志,返回的对象为空(就是创建不了对象啦!)。

 

      关于IPC::Semaphore模块的更详细内容,去CPAN看吧。http://www.cpan.org

 

#!/usr/bin/perl

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

my $sem;
if ($sem=IPC::Semaphore->new(1234,10,
			S_IRUSR | S_IWUSR | IPC_CREAT | IPC_EXCL)) {  # 能创建,说明‘1234’是第一次创建
	$sem->setall( (1) x 10 );                             # 初始化所有信号灯为1
} else {                                                  # 不能创建,说明‘1234’已存在
	$sem=IPC::Semaphore->new(1234,10,                     # 获得‘1234’信号灯集
			S_IRUSR | S_IWUSR | IPC_CREAT);
}

#查看所有信号灯的值
@sem=$sem->getall;
print "@sem\n";

# P操作
$sem->op(
	0, -1, IPC_NOWAIT,
);

# V操作
$sem->op(
	0, 1, IPC_NOWAIT,
);

#查看所有信号灯的值
@sem=$sem->getall;
print "@sem\n";

#$sem->remove;

 

分享到:
评论

相关推荐

    perl实时同步脚本

    perl实时同步脚本

    perl函数集(经典)

    ### Perl 函数集详解 #### 一、进程处理函数 ##### 1. 进程启动函数 在Perl中,有几种方法可以启动新的进程。这些函数不仅能够启动新进程,还可以控制它们的行为。 - **`eval`** - **函数名**: `eval` - **...

    oracle数据库同步perl脚本示例

    oracle数据库同步perl脚本示例 其中有2个文件,一个是 perl同步脚本,另一个是存储过程; 大致思路是:perl脚本从数据库A同步数据至库B的临时表中,再通过存储过程将库B中的临时数据过滤导入正式数据当中。

    perl多线程教程集

    3. 线程通信:Perl提供了一些同步原语,如锁(mutex)、条件变量(condition variable)和信号量(semaphore),用于线程间的通信和同步。例如,使用`lock()`可以防止多个线程同时访问同一数据。 三、Perl线程的...

    Perl 常见问题集

    ### Perl 常见问题集知识点汇总 #### 一、Perl简介与支持 - **Perl是什么?** - Perl是一种高级、通用且解释型的编程语言。它支持面向过程编程和面向对象编程,并且拥有丰富的文本处理功能。Perl最初是为了简化...

    神奇的perl两本perl入门教材合集

    6. **并发编程**:介绍Perl的线程和进程控制,以及异步编程的概念。 7. **脚本自动化与系统管理**:Perl在日常系统维护和自动化任务中的应用,如脚本编写、监控、日志分析等。 这两本书合集将帮助初学者系统地学习...

    perl语言教程合集

    Perl是一种强大的、高级的、通用的脚本编程语言,它在1987年由Larry Wall设计和开发。Perl因其灵活性和强大的文本处理能力而在系统管理、网页开发、网络编程等领域广泛应用。"Perl语言教程合集"是针对学习Perl语言者...

    Perl小程序清除死进程的IPC资源

    在这个特定的情况下,"Perl小程序清除死进程的IPC资源"是指一个用Perl编写的程序,它的主要功能是帮助管理员清理不再与任何运行中的进程关联的IPC(Interprocess Communication,进程间通信)资源。 IPC是操作系统...

    Perl-5.10.0版本

    Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0版本,Perl-5.10.0...

    利用Perl实现Linux下隐藏进程的查找.pdf

    ### 利用Perl实现Linux下隐藏进程的查找 #### 概述 随着Linux操作系统的广泛应用,特别是因其稳定性、高效性及灵活性,在服务器市场占据了一席之地。Linux内核的可装载模块(Loadable Kernel Modules,简称LKM)是...

    perl学习ppt全集

    Perl是一种强大的、高级的脚本编程语言,尤其在文本处理、系统管理任务和网络编程方面广泛应用。"perl学习ppt全集"是一份详尽的教程资料,旨在帮助初学者和有经验的程序员深入理解Perl语言的核心概念和高级特性。这...

    perl 函数全集(绝版)

    此外,Perl还有许多高级特性,如匿名函数(lambda 或 sub {}),模块(Module)机制,对象导向编程等。Perl11.htm、perl13.htm等文件可能分别详细介绍了Perl语言的不同部分,例如Perl 11可能是关于文件和I/O的函数,...

    Perl 5教程及perl常问问题集

    Perl社区维护了一份详细的《perl FAQ》(常问问题集),涵盖了从语言基础到高级特性的各种问题,是学习和解决问题的重要资源。常见问题包括变量作用域、引用、模块使用、文件处理、正则表达式等。通过深入阅读和实践...

    两本Perl教程合集下载.zip

    6. **错误处理和调试**:Perl提供了异常处理机制和调试工具,帮助开发者找出和修复代码中的问题。 "PERL常见问题集"则可能包含以下部分: 1. **常见错误及解决方法**:列出新手在编写Perl脚本时可能遇到的问题,并...

    多线程以及对数组的互斥操作的演示程序

    Perl语言传统上可以对多进程提供很好的支持方式,但是多进程方式降消耗掉很多内存,有的时候经常会出现一个进城占用10多M的内存的情况。从5.6版本开始Perl已经开始部分的支持多线程,而在5.8版本中进一步的得到了完善...

    Perl 语言常见问题集

    "Perl 语言常见问题集"很可能是针对Perl编程中遇到的一些典型问题的解答集合,涵盖了初学者到高级用户可能会遇到的各种场景。这样的资源对于学习和提高Perl编程技能非常有帮助,因为它提供了解决实际问题的具体步骤...

    Perl程序,打印某用户或某进程的相关进程树

    原创Perl脚本,可打印进程树等。 Usage: /usr/bin/which_proc -u <user name> -p /usr/bin/which_proc -u /usr/bin/which_proc -p 输出: Processes tree for user "testuser": --> testuser, 14392, su - ...

    Perl函数集及内置变量锦集

    Perl进程处理函数、数学函数、字符串处理函数等各类,perl的内置特殊变量还有很多的,例如常用的还有@_、@ARGV、$ARGV、%INC、%ENV等等,有很多,不可能一一列举了,这里给出一个比较有总结性的列表,是chinaunix上...

    神奇的perl与使用Perl编写CGI程序合集 PDF

    Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务方面表现卓越。"神奇的Perl"这本书作为最佳的PERL入门教程,旨在帮助初学者快速掌握这门语言的基础和核心概念。它深入浅出地介绍了Perl的语法、变量、...

Global site tag (gtag.js) - Google Analytics