线程实例 3人卖票

    xiaoxiao2021-12-14  22

    #include <stdio.h> #include <stdlib.h> #include <pthread.h> //#include <unistd.h> //#include <errno.h> #include <time.h> pthread_mutex_t mutex; pthread_cond_t cond1; pthread_cond_t cond2; pthread_cond_t cond3; int ticket = 10; void *sell_ticket1(void) {     while(1) { pthread_mutex_lock(&mutex); pthread_cond_wait(&cond1,&mutex); if(ticket > 0) { printf("sell ticket1--> chool ticket:%d\n",ticket--); //sleep(1); pthread_mutex_unlock(&mutex); } else { pthread_mutex_unlock(&mutex); break; } } return NULL; } void *sell_ticket2(void) { while(1) { pthread_mutex_lock(&mutex); pthread_cond_wait(&cond2,&mutex); if(ticket > 0) { //sleep(1); printf("sell ticket2--> chool ticket:%d\n",ticket--); //sleep(1); pthread_mutex_unlock(&mutex); } else { pthread_mutex_unlock(&mutex); break; } } } void *sell_ticket3(void) { while(1) { pthread_mutex_lock(&mutex); pthread_cond_wait(&cond3,&mutex); if(ticket > 0) { //sleep(1); printf("sell ticket3--> chool ticket:%d\n",ticket--); //sleep(1); pthread_mutex_unlock(&mutex); } else { pthread_mutex_unlock(&mutex); break; } } return NULL; } int main() {     int i=0,flog=0,ret=0;     pthread_t id1,id2,id3; int old_ticket = ticket; srand(time(NULL)); pthread_mutex_init(&mutex,NULL); pthread_cond_init(&cond1,NULL); pthread_cond_init(&cond2,NULL); pthread_cond_init(&cond3,NULL);     ret = pthread_create(&id1, NULL, (void*)sell_ticket1, NULL); if(ret == -1) { printf("create_thread1 error!\n"); exit(-1); } ret = pthread_create(&id2, NULL, (void*)sell_ticket2, NULL); if(ret == -1) { printf("create_thread2 error!\n"); exit(-1); }     ret = pthread_create(&id3, NULL, (void*)sell_ticket3, NULL); if(ret == -1) { printf("create_thread3 error!\n"); exit(-1); } sleep(1); for(i =0; i< old_ticket; i++) { flog = rand() % 3; //printf("%d\n",flog); switch(flog) { case 0: pthread_cond_signal(&cond1);break; case 1: pthread_cond_signal(&cond2);break; case 2: pthread_cond_signal(&cond3);break; } sleep(1); } pthread_cond_signal(&cond1); sleep(1); pthread_cond_signal(&cond2); sleep(1); pthread_cond_signal(&cond3); sleep(1);     ret = pthread_join(id1, NULL); if(ret == -1) { printf("join_thread1 error!\n"); exit(-1); } printf("id1 exit!\n");     ret = pthread_join(id2, NULL); if(ret == -1) { printf("join_thread2 error!\n"); exit(-1); } printf("id2 exit!\n");     ret = pthread_join(id3, NULL); if(ret == -1) { printf("join_thread3 error!\n"); exit(-1); } printf("id3 exit!\n");          return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-971791.html

    最新回复(0)