电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

生产者和消费者问题

生产者和消费者问题_第1页
1/6
生产者和消费者问题_第2页
2/6
生产者和消费者问题_第3页
3/6
精品文档。1欢迎下载班级姓名:学号:成绩:实验名称 : 生产者和消费者问题1. 实验目的:“生产者消费者”问题是一个著名的同时性编程问题的集合。通过编写经典的“生产者消费者”问题的实验,读者可以进一步熟悉Linux 中多线程编程,并且掌握用信号量处理线程间的同步互斥问题。2. 实验内容:“生产者消费者”问题描述如下。有一个有限缓冲区和两个线程: 生产者和消费者。 他们分别把产品放入缓冲区和从缓冲区中拿走产品。 当一个生产者在缓冲区满时必须等待,当一个消费者在缓冲区空时也必须等待。它们之间的关系如下图所示:这里要求用有名管道来模拟有限缓冲区,用信号量来解决生产者消费者问题中的同步和互斥问题。3. 实验方法:(1)使用信号量解决(2)思考使用条件变量解决4. 实验过程(1)信号量的考虑这里使用 3个信号量, 其中两个信号量avail和full分别用于解决生产者和消费者线程之间的同步问题, mutex是用于这两个线程之间的互斥问题。其中avail 初始化为 N(有界缓冲区的空单元数), mutex 初始化为 1,full初始化为 0。/*product.c*/ #include #include #include #include #include #include #include #include 精品文档。2欢迎下载#define FIFO "myfifo" #define 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((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST)) printf("cannot create fifoserver\n"); printf("Preparing for reading bytes...\n"); memset(buf_r,0,sizeof(buf_r)); /* 打开管道 */ fd=open(FIFO,O_RDWR|O_NONBLOCK,0); if(fd==-1) { perror("open"); exit(1); } /* 初始化互斥信号量为1*/ ret= sem_init(&mutex,0,1); /* 初始化 avail 信号量为 N*/ ret= sem_init(&avail,0,N); /* 初始化 full信号量为 0*/ ret=sem_init(&full,0,0); if(ret!=0) { perror("sem_init"); } /* 创建两个线程 */ ret= pthread_create(&id1,NULL,(void *)product...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

生产者和消费者问题

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部