项目:生产者消费者问题

#include
#include
#include
#include
sem_t mutex;
sem_t empty;
sem_t full;
/*信号量指针
  共享级别
  初始值*/
/*create the semaphore semaphore */
sem_init(&mutex,0,1);
sem_init(&empty,0,5);
sem_init(&full,0,0);
buffer_item buffer[BUFFER_SIZE]
int count=0;
int insert_item(buffer_item item){
	if(count=0){
		item=buffer[count];
		count--;
		return 0;	
	}
	else{
		printf("The buffer is empty ,draw failed");
		return -1;	
	}
	/*remove an object from buffer 
	placing it in item 
	return 0 if successful ,otherwise
	return -1 indicating an error condition*/
}
void *producer(void *param){
	buffer_item rand;
	while(TRUE){
		/*sleep for a random period of time*/
		sleep_time=rand()%10;
		sem_wait(&empty);
		sem_wait(&mutex);
		sleep(sleep_time);
		/*qenerate a random number*/
		rand = rand()%5;
		printf("producer produced %f \n",rand);
		if (insert_item(rand)){
			fprinf("report error condition");
		}
		sem_post(&full);
	}
}
void *consumer(void *param){
	buffer_item rand;
	while(TRUE){
		/*sleep for a random period of time*/
		sleep_time=rand()%10;
		sem_wait(&full);
		sem_wait(&mutex);
		sleep(sleep_time);
		if (remove_item(&rand)){
			fprintf("report error condition");
		}
		else{
			printf("consumer consumed %f \n",rand);
		}
		sem_post(&mutex);
		sem_post(&empty);
	}
}
int main(int argc,char *argv[]){
	/*1.get commond line arguments argv[1],argv[2]argv[3]*/
	int producer_num=argv[1];
	int consumer_num=argv[2];
	int main_sleep=argv[3];
	/*2.initialize buffer*/
	/*3.create producer thread(s)*/
	int p=0;
	if(fork()==0){
		while(p
随意写的,老师留的作业,尚未调试,不是最终版- -

你可能感兴趣的:(项目:生产者消费者问题)