利用线程原理模拟火车售票系统:

  1. 创建4个线程,其中3个实现售票功能,1个实现退票功能。
  2. 其中3个售票线程设定每隔一定时间售出一张票,退票线程定时退回一张票。
  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多线程编程实验相关推荐

  1. Linux 多线程编程实验知识整理

    1 Introduction 不用介绍了吧- 2 Thread Concepts 1.     Thread由下面部分组成: a.     Thread ID b.     Stack c.     ...

  2. linux多线程编程实验报告,Linux多线程编程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用pthread_create函数创建线程.1 2 3 4 5 6 7 8int (pthread_t *__rest ...

  3. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信

    <Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...

  4. ZT 为什么pthread_cond_t要和pthread_mutex_t同时使用 || pthread/Linux多线程编程

    为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用 (2009-10-27 11:07:23) 转载▼ 标签: 杂谈 分类: 计算机 举一个例子(http:// ...

  5. linux查询某域线程是否满了,Linux多线程编程的时候怎么查看一个进程中的某个线程是否存活...

    pthread_kill: 别被名字吓到,pthread_kill可不是kill,而是向线程发送signal.还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用sig ...

  6. linux线程 ppt,Linux多线程编程多核编程.ppt

    <Linux多线程编程多核编程.ppt>由会员分享,可在线阅读,更多相关<Linux多线程编程多核编程.ppt(28页珍藏版)>请在装配图网上搜索. 1.Linux多线程编程, ...

  7. 多核程序设计 linux,多核程序设计Linux多线程编程.ppt

    Linux多线程编程,IEEE POSIX 标准 p1003.1c (Pthreads) 定义了处理线程的一系列C 语言类型的API. 在Linux中,线程一般被认为是"轻量级的进程&quo ...

  8. Linux 多线程编程(实现生产者消费者模型)

    Linux 多线程编程 线程分类 线程按照其调度者可以分为用户级线程和内核级线程两种. 内核级线程 在一个系统上实现线程模型的方式有好几种,因内核和用户空间提供的支持而有一定程度的级别差异.最简单的模 ...

  9. Java 多线程编程 实验题

    Java 多线程编程 实验二 1.创建键盘操作练习 2. 双线程猜数字 3. 月亮围绕地球 1.创建键盘操作练习 题目描述: 编写一个Java应用程序,在主线程中再创建两个线程, 一个线程负责给出键盘 ...

  10. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

最新文章

  1. 树莓派安装Ubuntu
  2. centos 7安装 navicat
  3. 使用Spring MVC HandlerExceptionResolver处理异常
  4. 原: 安装VMtools过程流水帐
  5. Metal之Shading Language Specification(着色语言规范)
  6. Java接口程序练习
  7. php产品效果图,jQuery_基于JQuery制作的产品广告效果,效果图.如下: 动画效果介绍 - phpStudy...
  8. 网易财报暗藏玄机,不经意间已编织出电商大网
  9. 使用Git将项目上传到GitHub(Windows+Linux双教程)
  10. MySQL中的show variables like xxx 详解
  11. C++ memset()函数和bzero()函数
  12. 常见测试用例设计方法1---等价类划分
  13. 2018小米商城首页html,html+css实现小米商城首页静态页面
  14. Error launching IDEA解决方法
  15. 操作系统实验六 设备管理
  16. Metis异常检测初体验
  17. 小程序自定义tabbar踩坑笔记
  18. 每日java笔试五小题-2020-9-19
  19. cobar mysql5.6_Cobar介绍及配置
  20. 安全生产预警管理系统

热门文章

  1. IDEA创建JavaWeb项目
  2. python 微信公众号发文章_Python 微信公众号文章爬取
  3. 快速入手光学字符识别控件Aspose.OCR!学会使用C#以编程方式对图像执行OCR
  4. 64位驱动 hp630打印机_惠普630打印机驱动
  5. 2021-08-06MATLAB深度学习简单应用
  6. Scratch3.0学习视频链接
  7. ubuntu中firefox图片有色差问题
  8. 无法启动此程序因为计算机丢失gdiplus,gdiplus.dll 丢失
  9. Clover 引导 Windows 及 Linux 双系统
  10. 如何使用电脑扫描二维码