卖票——多线程模拟卖票系统
来源:互联网 发布:编程猫可以加盟吗 编辑:程序博客网 时间:2024/05/16 12:14
网上抢票,方便又高效,很舒服。应用多线程的同步运行可以模拟很多人抢票,而且不会发生冲突。下面,我们就来利用多线程来模拟一把。
#include <stdio.h>#include <stdlib.h>#include <pthread.h>int Tickets = 100; //定义票数为全局变量,所以线程都可访问pthread_mutex_t mutex; //定义互斥锁void delay() //自定义延迟函数,不可使用sleep{ int x = rand() % 30000; int y; while(x > 0) { y = rand() % 30000; while (y > 0) { y--; } x--; }}void *SaleTicket(void *arg){ int cur_ticket; //定义当前票数 while(1) { pthread_mutex_lock(&mutex); //加锁 cur_ticket = Tickets; if (cur_ticket <= 0) { pthread_mutex_unlock(&mutex); break; } printf("当前票数为:%d\n", cur_ticket); delay(); //随机延迟 cur_ticket--; Tickets = cur_ticket; //把当前票数返回给全局变量,让所有线程都知道 pthread_mutex_unlock(&mutex); //解锁 }}int main(){ pthread_t tid[5] = {0}; //定义5个线程ID int ret, i; srand(time(NULL)); //初始化随机函数 ret = pthread_mutex_init(&mutex, NULL); //初始化互斥锁 if (0 != ret) //初始化失败返回0 { perror("pthread_mutex_init"); exit(1); } for (i= 0; i < 5; i++) //模拟5个线程同时运行 { ret = pthread_create(&tid[i], NULL, SaleTicket, NULL); //创建线程 if (0 != ret) //创建失败 { perror("pthread_create"); exit(1); } } for(i = 0; i < 5; i++) { pthread_join(tid[i], NULL); //线程等待 } pthread_mutex_destroy(&mutex); //最后销毁互斥锁 return 0;}
运行结果:
阅读全文
0 0
- 卖票——多线程模拟卖票系统
- 卖票模拟多线程
- 模拟卖票系统
- 多线程,卖票系统
- JAVA多线程实现模拟卖票
- java多线程:6、模拟卖票
- Java多线程—两种卖票
- 多线程卖票
- 进程通信—卖票系统的实现
- 卖票系统
- 卖票系统
- 卖票
- 卖票
- 卖票
- 卖票
- 利用多线程模拟卖票的功能
- 多线程的使用实列-卖票系统
- UI多线程编程小练习--卖票系统
- spring alias
- 卷积函数-conv2d
- NYOJ 70
- 逗号表达式
- 【深度学习】网络结构总结
- 卖票——多线程模拟卖票系统
- java学习笔记-运算符与循环结构
- 一些简单的小程序_8——C语言篇
- Android框架机制研究与实践
- Shell编程学习(3)----脚本参数和控制语句的总结
- 使用C++编写乌龟画图程序
- HDU1022 Train Problem I【堆栈+STL+水题】
- Android CountDownTimer倒计时器的使用
- 致今天,明天的苏嵌154班