资源简介
压缩包中包括linux和windows的程序源代码及实验报告
消费者和生产者问题如下:
• 一个大小为3的缓冲区,初始为空
• 2个生产者
– 随机等待一段时间,往缓冲区添加数据,
– 若缓冲区已满,等待消费者取走数据后再添加
– 重复6次
• 3个消费者
– 随机等待一段时间,从缓冲区读取数据
– 若缓冲区为空,等待生产者添加数据后再读取
– 重复4次
说明:
• 显示每次添加和读取数据的时间及缓冲区的状态
• 生产者和消费者用进程模拟,缓冲区用共享内存来实现
代码片段和文件信息
#include
#include
#include
#include
#include
#define SEM_EMPTY 0
#define SEM_FULL 1
#define SEM_MUTEX 2
#define KEY 3
#define SEM_KEY 4
void P(int semid int sem_num);
void V(int semid int sem_num);
int main(int argcchar * argv[])
{
int i;
int shmidsemid;
int *pBuf = NULL*output;
//打开共享内存
shmid = shmget(KEY sizeof(int)*4 0);
pBuf = (int*)shmat(shmid 0 0);
output = pBuf;
if(pBuf==NULL)
printf(“共享内存附加失败!\n“);
//创建信号量
semid = semget(SEM_KEY3 IPC_CREAT|0660);
for(i=0; i<4; i++)
{
P(semidSEM_FULL); //相当于P(SEM_FULL)申请读取缓冲区的数据
P(semidSEM_MUTEX); //相当于P(SEM_MUTEX)申请访问缓冲区
//在缓冲区中读取数据将1置为0
output = pBuf;
while((*output)==0)
{
output++;
}
(*output)=0;
//获取当前系统时间
struct timeval curtime;
gettimeofday(&curtimeNULL);
printf(“消费者%s在缓冲区中读取数据,读取时间为:%ld:%ld\n“
argv[0]curtime.tv_seccurtime.tv_usec);
printf(“此时,缓冲区的状态为:\n“);
printf(“[ %d ][ %d ][ %d ]\n“*(pBuf)*(pBuf+1)*(pBuf+2));
V(semidSEM_MUTEX); //相当于V(SEM_MUTEX)释放信号量SEM_MUTEX
V(semidSEM_EMPTY); //相当于V(SEM_EMPTY)释放信号量SEM_EMPTY
//随机等待一段时间
int time = random()%5;
sleep(time);
}
return 0;
}
//P操作
void P(int semid int sem_num)
{
struct sembuf sops;
sops.sem_num=sem_num;
sops.sem_op=-1;
sops.sem_flg=0;
semop(semid &sops 1);
}
//V操作
void V(int semid int sem_num)
{
struct sembuf sops;
sops.sem_num=sem_num;
sops.sem_op=1;
sops.sem_flg=0;
semop(semid &sops 1);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1810 2011-04-07 19:21 消费者生产者\Linux\consumer.c
文件 1192 2011-04-07 19:35 消费者生产者\Linux\main.c
文件 1778 2011-04-07 19:19 消费者生产者\Linux\producer.c
文件 7764 2011-04-11 08:39 消费者生产者\Windows\ConsumerAndProducer.cpp
文件 32768 2011-04-07 19:56 消费者生产者\Windows\ConsumerAndProducer.exe
文件 799232 2011-04-14 19:06 消费者生产者\实验报告.doc
目录 0 2011-04-14 19:06 消费者生产者\Linux
目录 0 2011-04-14 19:06 消费者生产者\Windows
目录 0 2011-04-14 19:07 消费者生产者
----------- --------- ---------- ----- ----
844544 9
- 上一篇:PS制作证件照动作集
- 下一篇:调研报告《网络安全》
相关资源
- 随机森林R语言代码
- 计算机图形学 边填充算法实现代码
- 直流无刷电机方波驱动 stm32 例程代码
- 仿知乎界面小程序源代码
- 贪吃蛇源代码.fla
- 周立功开发板ProASIC3实验-syn_FIFO代码
- IMX385驱动代码.zip
- dotnet 写字板 实验 源代码 不好请要不
- 图像二维小波变换的实现源代码
- 八三编码器设计 VHDL代码 简单,包附
- linux应用层的华容道游戏源代码
- 交通咨询模拟系统完整代码
- http请求状态代码
- 数值分析所有实验代码
- 网上拍卖系统完整源代码
- 音乐代码转换软件 单片机编程时用
- CSMA/CD等动画演示加源代码
- silicon lab公司的收音IC SI47XX全套开发工
- 用51单片机实现G代码翻译
- 合同管理系统的源代码(附数据库)
- 用VC 编写的仿QQ聊天室程序源代码
- web班级网站设计代码
- 38k单片机红外发送代码、keil
- STM32F103 串口程序(完整版)
- 网络唤醒代码
- VPC3_DPV1源代码,Profibus
- PB做的托盘程序(最小化后在左下角显
- RSA算法源码
- ubuntu9.10 可加载内核模块和字符设备驱
- 操作系统 LRU算法 实验报告 及 程序代
评论
共有 条评论