资源简介

压缩包中包括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


评论

共有 条评论