logo资料库

linux 买票退票系统.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
Linux 多线程实例_《买票退票系统》 (一)多线程 mutex 互斥锁方式设计 买票退票系统,用 rand()函数定义退票随机. /* pthread_mutex_ticket:pthread_test2.c*/ #include #include #include #include #include //共有 50 张车票 int tickets=50; pthread_mutex_t mutex; int number; //随机数 sand()返回的变量名 void pthread1(void *arg); // void pthread2(void *arg); // int main(int argc, char *argv[]) { pthread_t id1,id2; int ret; pthread_mutex_init(&mutex, NULL); // /*creat pthread1*/ ret=pthread_create(&id1,NULL,(void *)pthread1,NULL); if(ret!=0) { perror("pthead creat1"); } /*creat pthread2*/ ret=pthread_create(&id2,NULL,(void *)pthread2,NULL); if(ret!=0) { perror("pthead cread2"); } pthread_join(id1,NULL); pthread_join(id2,NULL); exit(0); } void pthread1(void *arg) {
while(1) { number=rand() % 10; if(number<10&&number>2) { if(tickets>0) { if(pthread_mutex_lock(&mutex)!=0) { perror("pthread_mutex_lock"); } tickets--; printf("There are %d tickets now ,rand=%d \n",tickets,number); //每循环 1 次卖出 1 张 if(pthread_mutex_unlock(&mutex)!=0) { perror("pthread_mutex_unlock"); } sleep(1); } else { printf("\nThe tickets have sold out.\n"); exit(0); } } } } void pthread2(void *arg) { int nolock=0; while(1) { number=rand() % 10; if(number>=0&&number<2) { if(pthread_mutex_trylock(&mutex)!=0) { perror("pthread_mutex_trylock"); exit(1); }
tickets++; //每循环 1 次退 1 张 printf("Sold there are %d tickets now ,rand=%d \n",tickets,number); if(pthread_mutex_unlock(&mutex)!=0) { perror("pthread_mutex_unlock"); } sleep(5); } } 保存为:pthread_test1.c 编译: gcc pthread_test1.c –o pthread_test1 –l pthread –g 运行当前目录下 ./pthread_test1 (一) 多线程信号量方式设计 买票退票系统,用 rand()函数定义退票随机. /* pthread_signal_sem_ticket:pthread_test1.c*/ #include #include #include #include #include #include #include int tickets=50; sem_t sem; int number; void pthread1(void *arg); // void pthread2(void *arg); // int main(int argc, char *argv[]) { pthread_t id1,id2; int ret; ret =sem_init(&sem,0,1);
if(ret!=0) { perror("sem_init"); } /*creat pthread1*/ ret=pthread_create(&id1,NULL,(void *)pthread1,NULL); if(ret!=0) { perror("pthead creat1"); } /*creat pthread2*/ ret=pthread_create(&id2,NULL,(void *)pthread2,NULL); if(ret!=0) { perror("pthead cread2"); } pthread_join(id1,NULL); pthread_join(id2,NULL); exit(0); } void pthread1(void *arg) { while(1) { number=rand() % 10; if(number<10&&number>2) { if(tickets>0) { sem_wait(&sem); tickets--; printf("There are %d tickets now.rand=%d.\n",tickets,number); sem_post(&sem); sleep(1); } else { printf("\nThe tickets have sold out.\n"); exit(0); }
} } } void pthread2(void *arg) { int nolock=0; while(1) { number=rand() % 10; if(number>=0&&number<2) { sem_wait(&sem); tickets++; printf("Ticket back.There are %d tickets now.rand=%d.\n",tickets,number); sem_post(&sem); sleep(3); } } } 保存为:pthread_test2.c 编译: gcc pthread_test2.c –o pthread_test2 –l pthread –g 运行当前目录下 ./pthread_test2
分享到:
收藏