首页 > 代码库 > 生产者消费者问题(基于线程和无名信号量)
生产者消费者问题(基于线程和无名信号量)
//5.生产者消费者问题#include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <stdio.h> #define MAX 50 #define BUFSIZE 10 //仓库的大小int buf[BUFSIZE]={0}; int in=0; int out=0; sem_t full,empty; void* producer(void* arg) { int i; for (i = 1;i<=MAX;++i) { /*produce*/ sem_wait(&full); buf[in++]=i; in%=BUFSIZE; printf("生产了第%d个产品\n" ,i); sem_post(&empty); } pthread_exit((void*)"thread1 exit\n"); } void* comsumer(void* arg) { int i,data_c; for (i = 1;i<= MAX; ++i) { /*comsumer*/ sem_wait(&empty); data_c=buf[out++]; out%=BUFSIZE; printf("消费了%d个产品\n" ,data_c); sem_post(&full); } pthread_exit((void*)"thread2 exit\n"); } int main(void) { void *tret; sem_init(&full,0,10); //信号量的初始值为10和仓库的大小保持一致 sem_init(&empty,0,0); pthread_t tid_producer,tid_comsumer; pthread_create(&tid_producer,NULL,producer,NULL); pthread_create(&tid_comsumer,NULL,comsumer,NULL); pthread_join(tid_producer,&tret); printf("%s\n",(char*)tret); pthread_join(tid_comsumer,&tret); printf("%s\n",(char*)tret); sem_destroy(&full); sem_destroy(&empty); return 0;}
此程序一定要注意信号量的个数一定要和仓库的存储空间大小数值上要一样大,此程序两个数都为10
生产者消费者问题(基于线程和无名信号量)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。