文档介绍:实验二进程同步实验报告
实验二进程同步实验报告
1 / 91
实验二进程同步实验报告
实验二 进程同步
一、实验目的:
掌握根本的同步算法, 理解经典进程同步问题的本质; 学****使用 Linux的进程同步机制,
掌握相关直接使用信号量键,
所有其他的信号量函数使用由
semget函数返回的信号量
标识符。如果多个程序使用相同的
key值,key将负责协调工作。
实验二进程同步实验报告
实验二进程同步实验报告
8 / 98
实验二进程同步实验报告
第三个参数sem_flags是一组标志,当想要当信号量不存在时创立一个新的信号量,
可以和
值IPC_CREAT做按位或操作。设置了IPC_CREAT标志后,即使给出的键是一个已有信号量的键,也不会产生错误。而IPC_CREAT|IPC_EXCL那么可以创立一个新的,唯一的信号量,如
实验二进程同步实验报告
实验二进程同步实验报告
9 / 99
实验二进程同步实验报告
果信号量已存在,返回一个错误。
注意:建立信号量集时每个信号量的初始值不确定。
信号量控制操作
semctl() 系统调用在一个信号量集或集合中的单个信号量上执行各种控制操作。
函数原型:
#include<sys/>
intsemctl(intsemid,intsemnum,intcmd, /*unionsemunarg*/)
semnum:信号量编号或 0,表示对指定信号量做控制操作;
cmd:操作命令,实施的控制操作;
cmd参数:
IPC_STAT 获取信号量集的属性
IPC_SET 设置信号量集的属性
IPC_RMID 删除信号量集
GETVAL 返回semnum信号量的值
SETVAL 设置semnum信号量的值
GETALL 获取所有信号量的值
SETALL 设置所有信号量的初始值
第四个参数是 unionsemun
unionsemun{
intval;
structsemid_ds*buf;
unsignedshort*array;
}
例:定义一个信号量集,含 3个信号量,初始值分别为 (2,5,1) 。
semid=semget(IPC_PRIVATE,3,IPC_CREAT|IPC_EXCL|0777);
unsignedshortvals[3]={2,5,1};
unionsemnuse;
=vals;
semclt(semid,0,SETALL,se);
信号量集操作
semop()系统调用在 semid标识的信号量集中的信号量上执行一个或多个 up或down操
作,可用于进程间的同步和互斥。
函数原型:
#include<sys/>
intsemop(intsemid,structsembuf*semop,size_tnops);
实验二进程同步实验报告
实验二进程同步实验报告
10 / 910
实验二进程同步实验报告
返回:成功返回 0,出错返回-1。
Structsembuf{
unsignedsem_num; /*member#inset*/
short sem_op;/*operation(negative,0,positive*/
short sem_flg; /*IPC_NOWAIT,S