编写多线程火车售票模拟程序

2023-11-10 05:10

本文主要是介绍编写多线程火车售票模拟程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用c语言编写一个基于多线程的火车售票模拟程序。假如火车站有15张票要售出,现有2个售票点售票,其中售票点1每秒钟售出一篇火车票,售票点2每两秒钟售出一张火车票,用2个线程模拟2个售票情况。编译运行程序输入如下信息(输出的先后顺序不一定需要完全一样),其中W1代表售票点1,W2代表售票点2。

源代码:

(注意!!)sleep(1);//这里,如果用sleep(1.0)就只能运行两个就停下了,,,(找错半天才发现是这里的原因,,,,好坑(~ _ ~),,,)

#include  <stdio.h>
#include  <stdlib.h>
#include  <pthread.h>
#include  <ctype.h>int total_words;
void *sub_count(int);
pthread_mutex_t counter_lock=PTHREAD_MUTEX_INITIALIZER;main(int ac, char *av[])
{pthread_t t1, t2;		// two threads total_words =15;pthread_create(&t1, NULL, sub_count, (int) 1);pthread_create(&t2, NULL, sub_count, (int) 2);pthread_join(t1, NULL);pthread_join(t2, NULL);}void *sub_count(int x)
{int sum1=0,sum2=0;int temp; while(total_words>0){if(x==1){pthread_mutex_lock(&counter_lock);temp = total_words;temp--;total_words=temp;printf("w1:%5d tickets are left\n",total_words);sum1++;fflush(stdout);pthread_mutex_unlock(&counter_lock);sleep(1);//这里,如果用sleep(1.0)就只能运行两个就停下了}else if(x==2){pthread_mutex_lock(&counter_lock);temp = total_words;temp--;total_words=temp;printf("w2:%5d tickets are left\n",total_words);sum2++;		fflush(stdout);pthread_mutex_unlock(&counter_lock);sleep(2);	}}if(x==2)printf("w2:%5d tickets were sold from window 2\n",sum2);if(x==1)printf("w1:%5d tickets were sold from window 1\n",sum1);return NULL;
}

代码编译命令:

gcc sale.c -o sale -lpthread

运行结果截图:

 

这篇关于编写多线程火车售票模拟程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380526

相关文章

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

基于.NET编写工具类解决JSON乱码问题

《基于.NET编写工具类解决JSON乱码问题》在开发过程中,我们经常会遇到JSON数据处理的问题,尤其是在数据传输和解析过程中,很容易出现编码错误导致的乱码问题,下面我们就来编写一个.NET工具类来解... 目录问题背景核心原理工具类实现使用示例总结在开发过程中,我们经常会遇到jsON数据处理的问题,尤其是

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.