嵌入式培训4-7

今日作业:
1、有一个隧道,全长5公里,有2列火车,全长200米, 火车A时速 100公里每小时 火车B时速 50公里每小时 现在要求模拟火车反复通过隧道的场景(不可能2列火车都在隧道内运行)
2、有一个隧道,全长5公里,有3列火车,全长200米, 火车A时速 100公里每小时 火车B时速 50公里每小时 火车c时速 25公里每小时 现在要求 火车A先通过隧道,火车B再通过隧道,最后火车C通过隧道 火车是线程,隧道是临界资源

1、

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <pthread.h>
pthread_mutex_t A;
void* trainA(void *str)
{while(1){pthread_mutex_lock(&A);printf("火车A进入\n");sleep(1);printf("火车A驶出\n");pthread_mutex_unlock(&A);}
}
void* trainB(void *str)
{while(1){pthread_mutex_lock(&A);printf("火车B进入\n");sleep(2);printf("火车B驶出\n");pthread_mutex_unlock(&A);}
}
int main(int argc, const char *argv[])
{pthread_mutex_init(&A,NULL);pthread_t idA;if(pthread_create(&idA,NULL,trainA,NULL) != 0){perror("pthread_create");return 1;}pthread_t idB;if(pthread_create(&idB,NULL,trainB,NULL) != 0){perror("pthread_create");return 1;}pthread_detach(idB);pthread_detach(idB);while(1);return 0;
}

2、

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <pthread.h>
#include <semaphore.h>
pthread_mutex_t A;
pthread_mutex_t B;
pthread_mutex_t C;
void* trainA(void *str)
{while(1){pthread_mutex_lock(&A);printf("火车A进入\n");sleep(0.5);puts("火车A驶出");pthread_mutex_unlock(&B);}
}
void* trainB(void *str)
{while(1){pthread_mutex_lock(&B);printf("火车B进入\n");sleep(1);puts("火车B驶出");pthread_mutex_unlock(&C);}
}
void* trainC(void *str)
{while(1){pthread_mutex_lock(&C);printf("火车C进入\n");sleep(2);puts("火车C驶出");pthread_mutex_unlock(&A);}
}
int main(int argc, const char *argv[])
{pthread_mutex_init(&A,NULL);pthread_mutex_init(&B,NULL);pthread_mutex_init(&C,NULL);pthread_mutex_lock(&B);pthread_mutex_lock(&C);pthread_t idA;if(pthread_create(&idA,NULL,trainA,NULL) != 0){perror("pthread_create");return 1;}pthread_detach(idA);pthread_t idB;if(pthread_create(&idB,NULL,trainB,NULL) != 0){perror("pthread_create");return 1;}pthread_detach(idB);pthread_t idC;if(pthread_create(&idC,NULL,trainC,NULL) != 0){perror("pthread_create");return 1;}pthread_detach(idC);while(1);return 0;
}

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

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

相关文章

前端三剑客 —— JavaScript (第一节)

目录 回顾内容 1.弹性布局 2.网格布局 JavaScript 概述 发展 浏览器 什么是Javascript JavaScript 能干什么 JavaScript需要的环境 JavaScript初体验 基本数据 JS书写方式 行内JS 页面JS 外部JS 1&#xff09;创建外部JS文件 2&#xff09;编写页面 对话框 警…

达梦数据库的快速加列参数ALTER_TABLE_OPT使用

达梦数据库的表数据量较大时&#xff0c;在线直接修改表结构新增字段会很慢 现象&#xff1a;开发人员测试环境增加一个字段耗时7分钟&#xff0c;数据量仅仅2千万&#xff1b; 为了解决这一问题&#xff0c;达梦数据库提供一个动态会话级参数&#xff1a;ALTER_TABLE_OPT&am…

vue中三种watcher

在分析之前我们先来看看&#xff0c;vue中都有哪些Watcher种类呢&#xff1f;以及分别在什么时候创建呢&#xff1f;从vue源码里面看&#xff0c;Watcher是一个公共类&#xff0c;在不同的地方去初始化Watcher就代表不同类的Watcher。主要分为以下三类&#xff1a; computed w…

【Threejs进阶教程-效果篇】1.Threejs文字与css2d/css3d技术

Threejs文字与css2d/css3d技术 学习ThreeJS的捷径学习之前先搞清楚自己想要什么样的效果贴图文字准备一张带文字的png贴图使用sprite来进行贴图实现2D始终面朝相机的文字使用planeGeometry来贴图实现3D文字使用planeGeometry来贴图实现伪3D文字动态贴图文字html2Canvas 文字几何…

【算法】寻找数组中心下标 - 双指针/求总和

题目 给定一个非空数组&#xff0c;找到一个元素&#xff0c;该元素左侧元素和等于其右侧元素和&#xff0c;返回该元素下标。 如果没有则返回-1&#xff0c;有多个则返回最左侧一个。 原理 1、双指针 定义两个变量&#xff0c;一个为从左侧累加的和 leftSum 0&#xff0c…

操作系统复习

虚拟内存 内存(memory)资源永远都是稀缺的&#xff0c;当越来越多的进程需要越来越来内存时&#xff0c;某些进程会因为得不到内存而无法运行&#xff1b; 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存&#xff0c;而实际上&#xff0…

C++ P1271 【深基9.例1】选举学生会

文章目录 一、题目描述【深基9.例1】选举学生会题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 二、参考代码 一、题目描述 【深基9.例1】选举学生会 题目描述 学校正在选举学生会成员&#xff0c;有 n n n&#xff08; n ≤ 999 n\le 999 n≤999&#xff09;名候…

HTML基础知识详解(下)(如果想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;在上一篇文章中&#xff0c;我们已经学习完了超链接标签、列表标签和表格标签&#xff0c;但是我们还有一些标签没有学习&#xff0c;在这篇文章中&#xff0c;我们将学习剩余的标签。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页…

java的基本数据类型

在Java编程语言中&#xff0c;基本数据类型是构成Java程序的基础元素&#xff0c;它们用于存储简单值。Java的基本数据类型可以分为两大类&#xff1a;原始类型&#xff08;Primitive Types&#xff09;和引用类型&#xff08;Reference Types&#xff09;。原始类型包括整型、…

JAVA并发编程(一)

JAVA并发编程&#xff08;一&#xff09; 1.1JAVA线程API 1.1.1currentThread package com.lisus2000.thread;/** * 当前线程 * */ public class Test07 extends Thread {public Test07() {System.out.println("new Test07()......" Thread.currentThread().getNa…

【前端浅谈】前端开发语言有哪些

前端开发主要涉及到的语言包括以下几种&#xff1a; HTML (HyperText Markup Language): HTML是网页的基础结构&#xff0c;它定义了网页的结构和内容。HTML5是最新的版本&#xff0c;提供了更多的语义标签和API&#xff0c;用于构建更丰富、更互动的网页体验。 CSS (Cascadin…

vivado中移位寄存器的优化(二)

移位寄存器优化用于改善移位寄存器单元&#xff08;SRLs&#xff09;与其他逻辑单元之间的负裕量路径的时序。如果存在对移位寄存器单元&#xff08;SRL16E或SRLC32E&#xff09;的时序违规&#xff0c;优化会从SRL寄存器链的开始或结束位置提取一个寄存器&#xff0c;并将其放…

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

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

面试:HashMap

目录 1、底层数据结构&#xff0c;1.7 与1.8有何不同? 2、为何要用红黑树&#xff0c;为何一上来不树化&#xff0c;树化阈值为何是8&#xff0c;何时会树化&#xff0c;何时会退化为链表? 3、索引如何计算? hashCode都有了&#xff0c;为何还要提供hash()方法?数组容量为…

【Easy云盘 | 第十二篇】分享模块(获取分享信息、校验分享码、获取文件列表)

文章目录 4.4.4获取分享信息4.4.5校验分享码4.4.6获取文件列表 4.4.4获取分享信息 明天做 4.4.5校验分享码 明天做 4.4.6获取文件列表 明天做

Vue3大事件项目1 登录注册

创建项目 引入 element-ui 组件库 登录&#xff1a;注册样式准备之后&#xff0c;配置校验规则&#xff08;4个条件&#xff1a;一数据、二规则&#xff09; 1. 校验相关 (1) 给当前表单绑上整个的数据对象&#xff1a;el-form > :model"ruleForm" 绑…

云服务器是不是云盘?

​  云服务器是不是云盘?云服务器和云盘是两个不同的概念&#xff0c;尽管它们都是云计算服务的一部分。云服务器是一种提供计算能力的服务&#xff0c;可以运行各种应用程序和服务&#xff0c;而云盘则是一种提供数据存储和共享服务的工具。 具体来说&#xff1a; 云服务器…

【Qt】事件

目录 一、介绍 二、进入离开事件 三、鼠标事件 3.1 鼠标单击事件 3.2 鼠标释放事件 3.3 鼠标双击事件 3.4 鼠标移动事件 3.5 滚轮事件 四、按键事件 4.1 单个按键 4.2 组合按键 五、定时器 5.1 QTimerEvent类 5.2 QTimer类 5.3 获取系统日期及时间 六、窗口移…

插值表达式

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>插值表达式</title> </head> &l…

两个有序的链表合并成一个【C语言】

比如&#xff1a; 输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4 #include <stdio.h> #include <stdlib.h>typedef struct Node {int data;struct Node* next; } Node, *LinkedList;// 创建一个新节点 Node* cr…