2024/4/7 IOday6

1:有一个隧道,全长5公里,有2列火车,全长200米, 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <dirent.h>
#include <semaphore.h>
sem_t mutex1;//创建信号量
sem_t mutex2;//创建信号量

void* task_A(void* arg){
	float t=(5000+200)/(100/3.6);
	while(1){
		sem_wait(&mutex1);
		printf("火车A正在通过隧道,预计花费%.2f秒\n",t);
		sem_post(&mutex2);
		sleep(1);

	}
	return NULL;
}
void* task_B(void* arg){
	float t=(5000+200)/(50/3.6);
	while(1){
		sem_wait(&mutex2);
		printf("火车B正在通过隧道,预计花费%.2f秒\n",t);
		sem_post(&mutex1);
		sleep(1);

	}
	return NULL;
}

int main(int argc, const char *argv[])
{
	pthread_t id_a;
	pthread_t id_b;
	if(pthread_create(&id_a,NULL,task_A,NULL)!=0){
		perror("pthread_create:");
		return 1;
	}
	if(pthread_create(&id_b,NULL,task_B,NULL)!=0){
		perror("pthread_create:");
		return 1;
	}
	pthread_detach(id_a);
	pthread_detach(id_b);
	sem_init(&mutex1,0,1);//初始化信号量为1
	sem_init(&mutex2,0,0);//初始化信号量为0
	while(1){
	}
	return 0;
}

2:1:有一个隧道,全长5公里,有3列火车,全长200米, 火车A时速 100公里每小时 火车B时速 50公里每小时 火车c时速 25公里每小时 现在要求 火车A先通过隧道,火车B再通过隧道,最后火车C通过隧道 火车是线程,隧道是临界资源

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <dirent.h>
#include <semaphore.h>
sem_t mutex;
sem_t mutex_A;//创建信号量
sem_t mutex_B;//创建信号量
sem_t mutex_C;//创建信号量

void* task_A(void* arg){
	float t=(5000+200)/(100/3.6);
	while(1){
		sem_wait(&mutex_A);
		sem_wait(&mutex);
		printf("火车A正在通过隧道,预计花费%.2f秒\n",t);
		sem_post(&mutex);
		sem_post(&mutex_B);
	}
	return NULL;
}
void* task_B(void* arg){
	float t=(5000+200)/(50/3.6);
	while(1){
		sem_wait(&mutex_B);
		sem_wait(&mutex);
		printf("火车B正在通过隧道,预计花费%.2f秒\n",t);
		sem_post(&mutex);
		sem_post(&mutex_C);
	}
	
	return NULL;
}
void* task_C(void* arg){
	float t=(5000+200)/(25/3.6);
	while(1){
		sem_wait(&mutex_C);
		sem_wait(&mutex);
		printf("火车C正在通过隧道,预计花费%.2f秒\n",t);
		sem_post(&mutex);
		sem_post(&mutex_A);

	}
	return NULL;
}

int main(int argc, const char *argv[])
{
	pthread_t id_a;//创建火车A线程id
	pthread_t id_b;//创建火车B线程id
	pthread_t id_c;//创建火车C线程id
	sem_init(&mutex_A,0,1);//初始化信号量为1
	sem_init(&mutex_B,0,0);//初始化信号量为0
	sem_init(&mutex_C,0,0);//初始化信号量为0
	sem_init(&mutex,0,1);//初始化信号量为1
	if(pthread_create(&id_a,NULL,task_A,NULL)!=0){
		perror("pthread_create:");
		return 1;
	}
	if(pthread_create(&id_b,NULL,task_B,NULL)!=0){
		perror("pthread_create:");
		return 1;
	}
	if(pthread_create(&id_c,NULL,task_C,NULL)!=0){
		perror("pthread_create:");
		return 1;
	}
	pthread_detach(id_a);//分离式线程,自动回收线程A资源
	pthread_detach(id_b);
	pthread_detach(id_c);

	while(1){
		printf("111111\n");
		sleep(1);
	}

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523344.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 的主从复制、哨兵和cluster集群

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…

tabby 创建ssh远程配置提示:Timed out while waiting for handshake

不知道是不是网络延迟还是虚拟机克隆链接的问题&#xff0c;使用tabby无法正常的ssh远程过去&#xff0c;链接提示信息如下&#xff1a; SSH Connecting to 192.168.36.10SSH ! Agent auth selected, but no running agent is detectedSSH Host key fingerprint:SSH ecd…

Android匿名共享内存(Ashmem)

在Android中我们熟知的IPC方式有Socket、文件、ContentProvider、Binder、共享内存。其中共享内存的效率最高&#xff0c;可以做到0拷贝&#xff0c;在跨进程进行大数据传输&#xff0c;日志收集等场景下非常有用。共享内存是Linux自带的一种IPC机制&#xff0c;Android直接使用…

深入解析War包和Jar包机制

一、概述 代码编写完成后&#xff0c;需要部署到服务器&#xff0c;但部署到服务器对文件格式是有要求&#xff0c;原生的源代码目前是无法支持直接部署到服务器上的。目前有两种主要的文件格式War包和Jar包&#xff0c;通过一定的机制将源代码变成War包或Jar包&#xff0c;就…

42. 接雨水(Java)

目录 题目描述:输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a; height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1…

WebKit是什么?

WebKit是一个开源的浏览器引擎&#xff0c;它用于呈现网页内容在许多现代浏览器中&#xff0c;包括Safari浏览器、iOS内置浏览器、以及一些其他浏览器如Google Chrome的早期版本。以下是一些关于WebKit的重要信息&#xff1a; 起源和发展&#xff1a;WebKit最初是由苹果公司为其…

上传文件报错e20004 阿里云盘:空间不足 送的空间突然全到期了。免费无法长久 百度网盘扛住了压力,没有跟风。

https://blog.csdn.net/chenhao0568/article/details/137332783?spm1001.2014.3001.5501 免费撑不住了&#xff0c;这样下去干不过老大呀。百度网盘扛住了压力&#xff0c;没有跟风。

计算机网络——34LANs

LANs MAC地址和ARP 32bit IP地址 网络层地址用于使数据到达目标IP子网&#xff1a;前n - 1跳从而到达子网中的目标节点&#xff1a;最后一跳 LAN&#xff08;MAC/物理/以太网&#xff09;地址&#xff1a; 用于使帧从一个网卡传递到与其物理连接的另一个网卡&#xff08;在同…

计算机网络练习-计算机网络概述与性能指标

计算机网络概述 ----------------------------------------------------------------------------------------------------------------------------- 1. 计算机网络最据本的功能的是( )。 1,差错控制 Ⅱ.路由选择 Ⅲ,分布式处理 IV.传输控制 …

人眼对亮度的感知

对比两本书的说法 计算机图形学的算法基础 david f.rogers 如图所示: 然后看数字图像处理_第三版_中_冈萨雷斯的说法&#xff1a; 视觉错觉对于做图像处理没有什么大用。前面两点有用。 第一点。马赫带效应&#xff0c;明暗变化太强的时候&#xff0c;出现马赫带。较明区域是…

蓝桥杯刷题-14-更小的数-区间DP⭐

蓝桥杯2023年第十四届省赛真题-更小的数 //区间DP #include <iostream> #include<bits/stdc.h> #define int long long using namespace std; const int N5e310; int f[N][N]; void solve(){string s;cin>>s;int ans0;for(int len2;len<s.size();len){for…

Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑

Sora 是什么&#xff1f; 2024年2月16日&#xff0c;OpenAI 在其官网上面正式宣布推出文本生成视频的大模型Sora 这样说吧给你一段话&#xff0c; 让你写一篇800字的论文&#xff0c;你的理解很可能都有偏差&#xff0c;那么作为OpenAi要做文生视频到底有多难&#xff0c;下面…

牛市来临,模块化赛道可能会出现下个以太坊?

市场专家普遍预测&#xff0c;2024年将成为加密货币市场迎来新一轮牛市的关键时刻。研究人员将下一次比特币&#xff08;BTC&#xff09;减半以及2024年现货BTC ETF&#xff08;交易所交易基金&#xff09;的可能性视为推动下一次牛市的潜在因素。这一牛市的可能爆发有望吸引大…

Leetcode 148. 排序链表

心路历程&#xff1a; 这道题通过很简单&#xff0c;但是如果想要用O(1)的空间复杂度O(nlogn)的时间复杂度的话&#xff0c;可能得需要双指针快排的思路。 解法&#xff1a;遍历模拟 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0…

Pillow教程09:图片格式(png,jpg,ico等)批量转换+批量修改图片尺寸

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

PLM系统同步到SAP修改、停用BOM数据

MATNR 1 类型 MATNR CHAR 40 0 0 物料编号 WERKS 1 类型 WERKS_D CHAR 4 0 0 工厂 STLAN 1 类型 STLAN CHAR 1 0 0 物料清单用途 STLAL 1 类型 STLAL CHAR 2 0 0 备选物料清单 AENNR …

2024.4.7作业

//登陆界面 this->setWindowTitle("传奇霸业"); this->setWindowIcon(QIcon("C:\\Users\\l1693\\Desktop\\pictures\\1.png")); this->resize(400,300); this->setFixedSize(400,300); //登录界面修饰 //底图 QLabel *lab5 new QLabel(this);…

深入理解数据结构第三弹——二叉树(3)——二叉树的基本结构与操作

二叉树&#xff08;1&#xff09;&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 二叉树&#xff08;2&#xff09;&#xff1a;深入理解数据结构第二弹——二叉树&#xff08;2&#xff09;——堆排序及其时间复杂度-CSDN博客 前言…

前端学习之DOM编程案例:全选反选案例

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>全选反选</title> </head> <body><input type"checkbox" id"all">全选<ul><li><…

File,IO流,递归详解

File类 介绍 java.io.File类是Java语言提供了用来描述文件和目录(文件夹)的 构造 方法 注意&#xff1a; 构造方法中通常用的是第一个方法文件和目录可以通过File封装成对象File封装的对象仅仅是一个路径名&#xff0c;它是可以存在的&#xff0c;也可以不存在 绝对路径…