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);//初始化信号量为1sem_init(&mutex2,0,0);//初始化信号量为0while(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线程idpthread_t id_b;//创建火车B线程idpthread_t id_c;//创建火车C线程idsem_init(&mutex_A,0,1);//初始化信号量为1sem_init(&mutex_B,0,0);//初始化信号量为0sem_init(&mutex_C,0,0);//初始化信号量为0sem_init(&mutex,0,1);//初始化信号量为1if(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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特别详细的Spring Cloud 系列教程1:服务注册中心Eureka的启动

Eureka已经被Spring Cloud继承在其子项目spring-cloud-netflix中&#xff0c;搭建Eureka Server的方式还是非常简单的。只需要通过一个独立的maven工程即可搭建Eureka Server。 我们引入spring cloud的依赖和eureka的依赖。 <dependencyManagement><!-- spring clo…

工单派单-saas工单处理软件效益分析,智能解决企业管理痛点亿发

企业对引入工单管理系统是有迫切需求的&#xff0c;工单管理系统可以有效地管理任务和工作流程&#xff0c;提高工作效率和客户满意度。 在没有工单管理系统之前&#xff0c;许多企业可能面临着诸如任务分配不清晰、信息不透明、工作流程混乱等管理挑战。举例来说&#xff0c;…

蓝桥杯 历届真题 杨辉三角形【第十二届】【省赛】【C组】

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 思路&#xff1a; 由于我第一写没考虑到大数据的原因&#xff0c;直接判断导致只得了40分&#xff0c;下面是我的代码&#xff1a; #…

《Ubuntu20.04环境下的ROS进阶学习6》

一、手持激光雷达建图 在上次的学习中我们已经使用hector_Mapping在仿真环境下建图了&#xff0c;那么本节我们将拿出真实雷达做一次室内的建图。我们使用的是思岚的S2L激光雷达。 二、下载思岚的应用手册 首先我们根据自己的激光雷达类型去到思岚官网下载相应的ROS包&#xff…

哪些医疗器械申请FDA,需要准备网络安全文件?需要提交的文件都是什么样的?

一、什么类型的医疗器械需要递交网络安全文件&#xff1f; FD&C法案第524B条(c) 条将“网络设备”定义为&#xff1a; 1&#xff09;经申请人验证、安装或授权的软件或设备&#xff1b; 2&#xff09;具备连接互联网的能力&#xff1b; 3&#xff09;包含经申请人验证、…

刷代码随想录有感(24)

有时候我会怀疑努力的意义&#xff0c;因为我总是花人家好几倍的时间去理解一个狗看了都觉得弱智的问题&#xff0c;思考过后我知道&#xff0c;努力本没有意义&#xff0c;是在未来可能十年内取得成就时突然回想起来之前做过一些事情&#xff0c;未来的成就赋予曾经的意义&…

pdf、docx、markdown、txt提取文档内容,可以应用于rag文档解析

返回的是文档解析分段内容组成的列表&#xff0c;分段内容默认chunk_size: int 250, chunk_overlap: int 50&#xff0c;250字分段&#xff0c;50分段处保留后面一段的前50字拼接即窗口包含下下一段前面50个字划分 from typing import Union, Listimport jieba import recla…

SpringBoot3整合RabbitMQ之三_工作队列模型案例

SpringBoot3整合RabbitMQ之三_工作队列模型案例 文章目录 SpringBoot3整合RabbitMQ之三_工作队列模型案例2. 工作队列模型1. 消息发布者1. 创建工作队列的配置类2. 发布消费Controller 2. 消息消费者One3. 消息消费者Two4. 消息消费者Three5. 输出结果 2. 工作队列模型 1. 消息…

绘图工具 draw.io / diagrams.net 免费在线图表编辑器

拓展阅读 常见免费开源绘图工具 OmniGraffle 创建精确、美观图形的工具 UML-架构图入门介绍 starUML UML 绘制工具 starUML 入门介绍 PlantUML 是绘制 uml 的一个开源项目 UML 等常见图绘制工具 绘图工具 draw.io / diagrams.net 免费在线图表编辑器 绘图工具 excalidr…

四大生成式模型的比较——GAN、VAE、归一化流和扩散模型

比较四大模型的本质 four modern deep generative models: generative adversarial networks, variational autoencoders, normalizing flows, and diffusion models 待写

FPGA实现CLAHE算法(Verilog)

在介绍CLAHE算法之前必须要先提一下直方图均衡化&#xff0c;直方图均衡化算法是一种常见的图像增强算法&#xff0c;可以让像素的亮度分配的更加均匀从而获得一个比较好的观察效果。 左边是原图&#xff0c;右边是经过直方图均衡化后图&#xff0c;可以看到肋骨什么的可以更…

网络规划(homework 静态路由 and Rip路由表更新)

1、写出下图路由器1和路由器3中的路由表&#xff08;按直接交付、特定主机交付、特定网络交付、 默认交付的顺序放置路由项&#xff09; 2、写出Ri更新后的路由表&#xff08;rip路由协议&#xff09; 1、将Rj广播的路由消息全部1 2、直接对照着更新Ri中的路由表