Linux进程间通讯之信号量
一. 什么是信号量
信号量(Semaphore)-- 相当一个信号灯,程序里是一个非负整数,表示状态.
可以用来保护两个或多个关键代码段,这些关键代码段不能并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。
如果关键代码段中没有任何线程,那么线程会立即进入该框图中的那个部分。一旦该关键代码段完成了,那么该线程必须释放信号量。
其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量,
然后将Acquire Semaphore 以及Release Semaphore 分别放置在每个关键代码段的首末端。确认这些信号量引用的是初始创建的信号量。
信号量:一个整数;
大于或等于0时代表可供并发进程使用的资源实体数;
小于0时代表正在等待使用临界区的进程数;
用于互斥的信号量初始值应大于0;
只能通过P、V原语操作而改变;
信号量元素组成:
1、表示信号量元素的值;
2、最后操作信号量元素的进程ID
3、等待信号量元素值+1的进程数;
4、等待信号量元素值为0的进程数;
二、主要函数
1.1 创建信号量
int semget(
key_t key, //标识信号量的关键字,有三种方法:1、使用IPC——PRIVATE让系统产生, 2、挑选一个随机数,3、使用ftok从文件路径名中产生
int nSemes, //信号量集中元素个数
int flag //IPC_CREAT;IPC_EXCL 只有在信号量集不存在时创建
)
成功:返回信号量句柄
失败:返回-1
1.2 使用ftok函数根据文件路径名产生一个关键字
key_t ftok(const char *pathname,int proj_id);
路径名称必须有相应权限
1.3 控制信号量
int semctl(
int semid, //信号量集的句柄
int semnum, //信号量集的元素数
int cmd, //命令
/*union senum arg */... //
)
成功:返回相应的值
失败:返回-1
命令详细说明:
cmd: IPC_RMID 删除一个信号量
IPC_EXCL 只有在信号量集不存在时创建
IPC_SET 设置信号量的许可权
SETVAL 设置指定信号量的元素的值为 agc.val
GETVAL 获得一个指定信号量的值
GETPID 获得最后操纵此元素的最后进程ID
GETNCNT 获得等待元素变为1的进程数
GETZCNT 获得等待元素变为0的进程数
union senum 定义如下:
union senum{
int val;
struct semid_ds *buf;
unsigned short * array;
}agc;
其中 semid_ds 定义如下:
struct semid_ds{
struct ipc_pem sem_pem; /
相关文档:
总览
用iptables -ADC 来指定链的规
则
,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......
电脑中必不可少的就是操作系统。而Linux的发展非常迅速,有赶超微软的趋势。这里介绍Linux的知识,让你学好应用Linux系统。比如要把/etc/apache/bin目录添加到PATH中,方法有三:
1.#PATH=$PATH:/etc/apache/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
......
1.date :显示日期
%:::z 时区
2. cal :显示日历(横排),ncal(竖排)
3. bc :调用计算器
用/作除法运算时,可先用指令 scale=number(number表示显示的小数点位数) 再做除法运算,使得可以显示小数点后(number)位。(bc默认只显示整数)
退出计算器: quit
4.[Tab] ......
目录
1 引言... 3
1.1 背景... 3
1.2 编写目的... 3
1.3 定义... 3
1.4 参考资料... 3
2. Apache与JBoss服务器简介... 3
2.1 Apache服务器... 3
2.2 JBoss服务器... 3
3. Apache与JBoss服务器配置整合... 3
3.1 让Apache与JBoss一起工作... 3
3.1.1 简介... 3
3.1.2 环境... 3
3.1.3 安装... 4
3.1.4 配置... ......
窗体顶端
索引:
1.fork、exec和exit对IPC对象的影响
2.fcntl记录锁
3.管道和FIFO的属性
4.管道和FIFO的限制
5.pipe函数
6.popen和pclose
7.mkfifo函数
8.System V IPC共性描述
9.msqid_ds结构
10.msgget函数
11.msgsnd函数
12.msgrcv函数
13.msgctl函数
14.在System V消息队列上使用select和poll
15.sem ......