diff --git a/实验2.1 b/实验2.1 index 2f034a5..6d7c600 100644 --- a/实验2.1 +++ b/实验2.1 @@ -4,30 +4,30 @@ #include #include #include -int n=10, in=0,out=0,buffer[10]; -sem_t empty,full; +int n=10, in=0,out=0,buffer[10];//定义变量并创建数组。 +sem_t empty,full;//定义信号量 void* producer(void *arg){ - int tag= pthread_self()%100; + int tag= pthread_self()%100;//线程信号 int nextPro; - srand(time(NULL)+tag); + srand(time(NULL)+tag);//随机数种子 while(1){ nextPro = rand()%97; - sem_wait(&empty); + sem_wait(&empty);//empty–1 buffer[in] = nextPro; printf("production:%d %d\n",nextPro,buffer[in]); usleep(1000*1000/20); in = (in+1)%n; - sem_post(&full); + sem_post(&full);//full+1 usleep(1000*1000/2); } } void* consumer(void *arg) { int item; while(1){ - sem_wait(&full); + sem_wait(&full)//full–1 item = buffer[out]; - sem_post(&empty); + sem_post(&empty);//empty+1 printf("consume:%d\n",buffer[out]); out = (out+1)%n; usleep(1000*1000/10); @@ -35,13 +35,12 @@ void* consumer(void *arg) { } int main() { pthread_t tid[7]; - //初始有10个缓冲区 sem_init( &empty, 0,10); - sem_init( &full, 0,0); + sem_init( &full, 0,0);//初始化信号量 for(int i=0;i<6;i++) - pthread_create(&tid[i], NULL, producer, NULL); - pthread_create(&tid[6], NULL, consumer, NULL); + pthread_create(&tid[i], NULL, producer, NULL);//创建生产者 + pthread_create(&tid[6], NULL, consumer, NULL);//创建消费者 for(int i = 0; i<7; i++) - pthread_join(tid[i], NULL); + pthread_join(tid[i], NULL);//等待线程结束 printf("main is over\n"); } \ No newline at end of file