//购票系统 #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> pthread_mutex_t lid; int num = 3; int flag = 1; void *sale(void *arg); void *refund(void *arg); int main() { int ret; pthread_t id1,id2; ret = pthread_mutex_init(&lid,NULL); if(ret != 0) { perror("lock init fail"); exit(0); } pthread_create(&id1,NULL,sale,NULL); pthread_create(&id2,NULL,refund,NULL); pthread_join(id1,NULL); pthread_join(id2,NULL); //等待线程执行完成主线程才会结束。 pthread_exit(NULL); } void *sale(void *arg) { while(1) { pthread_mutex_lock(&lid); char key; switch(flag) { case 1:printf("座票剩余:%d\r\n",num);break; case 2:printf("站票剩余:%d\r\n",num);break; default:break; } printf("是否需要购票?\r\nY/N/T\r\n"); scanf(" %c",&key); if(key == 'Y' || key == 'y') { num--; printf("购票成功!\r\n余票为:%d\r\n",num); sleep(1); system("clear"); //购票成功之后等待1s清除屏幕 if(num == 0) { if(flag == 1) //当坐票没有了就购买的是站票。 { num = 5; //站票5张 flag = 2; } else if(flag == 2) { printf("余票不足,退出购票系统!\r\n"); pthread_mutex_unlock(&lid); exit(0); } } pthread_mutex_unlock(&lid); } else if(key == ‘T’) { pthread_mutex_unlock(&lid); pthread_exit(NULL); } else { system("clear"); pthread_mutex_unlock(&lid); usleep(500); } } } void *refund(void *arg) { while(1) { pthread_mutex_lock(&lid); if(num < 5) //有票售出才能退票 { char key; printf("是否需要退票?\r\nY/N/T\r\n"); scanf(" %c",&key); if(key == 'Y' || key == 'y') { num++; printf("退票成功!\r\n余票为:%d\r\n",num); sleep(1); system("clear"); pthread_mutex_unlock(&lid); } else { system("clear"); pthread_mutex_unlock(&lid); usleep(500); } } else if(key == ‘T’) { pthread_mutex_unlock(&lid); pthread_exit(NULL); } else { printf("票仓已满,无法退票,即将推出购票系统...\r\n"); sleep(2); pthread_mutex_unlock(&lid); exit(0); } } } |
售票系统(线程)
最新推荐文章于 2024-05-17 20:22:06 发布