生产者消费者程序设计
“生产者消费者”实验
1.实验目的
通过编写“生产者消费者”问题的实验,读者可以进一步熟悉 Linux 中多线程编程,并且掌握用信号量处理
线程间的同步互斥问题。
2.实验内容
“生产者消费者”问题描述如下。
有一个有限缓冲区和两个线程:生产者和消费者。他们分别把产品放入缓冲区和从缓冲区中拿走产品。当
一个生产者在缓冲区满时必须等待,当一个消费者在缓冲区空时页必须等待。它们之间的关系如下图所示:
生产者 1 2 3 … N 消费者
图 9.4 生产者消费者问题描述
这里用有名管道来模拟有限缓冲区,用信号量来解决生产者消费者问题中的同步和互斥问题。
3.实验代码
/*product.c*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <sys/ipc.h>
#include <semaphore.h>
#include <fcntl.h>
#de$ne FIFO "my$fo"
#de$ne N 5
int lock_var;
time_t end_time;
char buf_r[100];
sem_t mutex,full,avail;
int fd;
void pthread1(void *arg);
void pthread2(void *arg);
int main(int argc, char *argv[])
{
pthread_t id1,id2;
pthread_t mon_th_id;
int ret;
end_time = time(NULL)+30;
/*创建有名管道*/
if((mk$fo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
printf("cannot create $foserver");
printf("Preparing for reading bytes...");
memset(buf_r,0,sizeof(buf_r));
/*打开管道*/
评论0
最新资源