Linux多线程编程实验
利用线程原理模拟火车售票系统:
- 创建4个线程,其中3个实现售票功能,1个实现退票功能。
- 其中3个售票线程设定每隔一定时间售出一张票,退票线程定时退回一张票。
- 初始车票数量自行设定,输出显示信息根据情况自行拟定。
#include<stdio.h>
#include<pthread.h> #include<stdlib.h>
#include<unistd.h>
#include<time.h>
#include<sys/time.h>int tickets=150;//定义售票数
pthread_mutex_t lock;// 定义锁
//获取系统当前时间int getSystemTime() { time_t timer; struct tm t_tm; time(&timer); localtime_r(&timer, &t_tm); printf("时间: %4d/%02d/%02d %02d:%02d:%02d\r\n", t_tm.tm_year+1900, t_tm.tm_mon+1, t_tm.tm_mday, t_tm.tm_hour, t_tm.tm_min, t_tm.tm_sec); return 0; } //余票不多时进行提醒
void Noticeprint(){ pthread_mutex_lock(&lock);if(tickets<=10&&tickets>0){printf("票即将售空!剩余%d张\n\n",tickets); } else if(tickets==0){ printf("票已售空!\n\n"); } pthread_mutex_unlock(&lock);
}
//购票
void *GetTickets(void *args){ while(1) { Noticeprint(); pthread_mutex_lock(&lock);// 上锁 int ticket=rand()%(10-1+1)+1;//售票数值为随机数if(tickets>0&&ticket<=tickets){ getSystemTime();//显示售票时间printf("%s正在为您服务!\n",(char*)args);printf("客户:买%d张车票\n",ticket);printf("窗口:售出%d张车票,剩余%d张\n\n",ticket,tickets-=ticket);pthread_mutex_unlock(&lock);// 解锁 sleep(2); } else { pthread_mutex_unlock(&lock);// 解锁break; } }
}
//退票
void *Refund(void *args){ while(1) { pthread_mutex_lock(&lock);// 上锁 int ticket=rand()%(10-1+1)+1;if(tickets>0&&(ticket+tickets)<=150) { sleep(5);getSystemTime();printf("%s正在为您服务!\n",(char*)args);printf("客户:退%d张车票\n",ticket);printf("窗口:退回%d张车票,剩余%d张\n\n",ticket,tickets+=ticket); //tickets=tickets-ticket;pthread_mutex_unlock(&lock);// 解锁 } else { pthread_mutex_unlock(&lock); break; } }
}
int main()
{ pthread_t t1,t2,t3,t4;//存放线程标识符pthread_mutex_init(&lock,NULL);// 初始化锁 printf("开始售票,现有福州->厦门 150张\n\n"); //创建4个子线程 pthread_create(&t1,NULL,GetTickets,"窗口1"); sleep(1); pthread_create(&t2,NULL,GetTickets,"窗口2"); sleep(1); pthread_create(&t3,NULL,GetTickets,"窗口3"); sleep(1); pthread_create(&t4,NULL,Refund,"窗口4"); sleep(1); //等待线程结束 pthread_join(t1,NULL); pthread_join(t2,NULL); pthread_join(t3,NULL); pthread_join(t4,NULL); pthread_mutex_destroy(&lock);// 释放锁
}
运行结果:
售票:
退票:
余票不多时进行提醒:
售空退出:
Linux多线程编程实验相关推荐
- Linux 多线程编程实验知识整理
1 Introduction 不用介绍了吧- 2 Thread Concepts 1. Thread由下面部分组成: a. Thread ID b. Stack c. ...
- linux多线程编程实验报告,Linux多线程编程
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用pthread_create函数创建线程.1 2 3 4 5 6 7 8int (pthread_t *__rest ...
- 实验六 Linux进程编程,Linux系统编程实验六:进程间通信
<Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...
- ZT 为什么pthread_cond_t要和pthread_mutex_t同时使用 || pthread/Linux多线程编程
为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用 (2009-10-27 11:07:23) 转载▼ 标签: 杂谈 分类: 计算机 举一个例子(http:// ...
- linux查询某域线程是否满了,Linux多线程编程的时候怎么查看一个进程中的某个线程是否存活...
pthread_kill: 别被名字吓到,pthread_kill可不是kill,而是向线程发送signal.还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用sig ...
- linux线程 ppt,Linux多线程编程多核编程.ppt
<Linux多线程编程多核编程.ppt>由会员分享,可在线阅读,更多相关<Linux多线程编程多核编程.ppt(28页珍藏版)>请在装配图网上搜索. 1.Linux多线程编程, ...
- 多核程序设计 linux,多核程序设计Linux多线程编程.ppt
Linux多线程编程,IEEE POSIX 标准 p1003.1c (Pthreads) 定义了处理线程的一系列C 语言类型的API. 在Linux中,线程一般被认为是"轻量级的进程&quo ...
- Linux 多线程编程(实现生产者消费者模型)
Linux 多线程编程 线程分类 线程按照其调度者可以分为用户级线程和内核级线程两种. 内核级线程 在一个系统上实现线程模型的方式有好几种,因内核和用户空间提供的支持而有一定程度的级别差异.最简单的模 ...
- Java 多线程编程 实验题
Java 多线程编程 实验二 1.创建键盘操作练习 2. 双线程猜数字 3. 月亮围绕地球 1.创建键盘操作练习 题目描述: 编写一个Java应用程序,在主线程中再创建两个线程, 一个线程负责给出键盘 ...
- Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)
本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...
最新文章
- 树莓派安装Ubuntu
- centos 7安装 navicat
- 使用Spring MVC HandlerExceptionResolver处理异常
- 原: 安装VMtools过程流水帐
- Metal之Shading Language Specification(着色语言规范)
- Java接口程序练习
- php产品效果图,jQuery_基于JQuery制作的产品广告效果,效果图.如下: 动画效果介绍 - phpStudy...
- 网易财报暗藏玄机,不经意间已编织出电商大网
- 使用Git将项目上传到GitHub(Windows+Linux双教程)
- MySQL中的show variables like xxx 详解
- C++ memset()函数和bzero()函数
- 常见测试用例设计方法1---等价类划分
- 2018小米商城首页html,html+css实现小米商城首页静态页面
- Error launching IDEA解决方法
- 操作系统实验六 设备管理
- Metis异常检测初体验
- 小程序自定义tabbar踩坑笔记
- 每日java笔试五小题-2020-9-19
- cobar mysql5.6_Cobar介绍及配置
- 安全生产预警管理系统
热门文章
- IDEA创建JavaWeb项目
- python 微信公众号发文章_Python 微信公众号文章爬取
- 快速入手光学字符识别控件Aspose.OCR!学会使用C#以编程方式对图像执行OCR
- 64位驱动 hp630打印机_惠普630打印机驱动
- 2021-08-06MATLAB深度学习简单应用
- Scratch3.0学习视频链接
- ubuntu中firefox图片有色差问题
- 无法启动此程序因为计算机丢失gdiplus,gdiplus.dll 丢失
- Clover 引导 Windows 及 Linux 双系统
- 如何使用电脑扫描二维码