Linux标准IOday5

embedded/2025/1/15 6:07:35/

1:思维导图

2:有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m,要求模拟这两列火车通过隧道的场景

 #include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#include <wait.h>#include <signal.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/socket.h>#include <sys/ipc.h>#include <sys/sem.h>#include <semaphore.h>#include <sys/msg.h>#include <sys/shm.h>#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;	
pthread_mutex_t m;
int task1()
{pthread_mutex_lock(&m);printf("高铁过去\n");for(int i=0;i<1000/100;i++){printf("-");sleep(1);fflush(stdout);}putchar(10);pthread_mutex_unlock(&m);
}
int task2()
{pthread_mutex_lock(&m);printf("快车过去\n");for(int i=0;i<1000/50;i++){printf("-");sleep(1);fflush(stdout);}putchar(10);pthread_mutex_unlock(&m);
}
void* thread_main(void* arg)
{task2();
}
int main(int argc, const char *argv[])
{pthread_mutex_init(&m,NULL);pthread_t id;pthread_create(&id,0,thread_main,0);task1();pthread_join(id,NULL);return 0;
}

3:有一个隧道,长1000m,有一辆高铁,每秒100米,有一辆快车,每秒50m,有一辆慢车每秒25m,要求模拟这两列火车通过隧道的场景,但是要求高铁最先过隧道,快车其次,慢车最后

 #include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#include <wait.h>#include <signal.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/socket.h>#include <sys/ipc.h>#include <sys/sem.h>#include <semaphore.h>#include <sys/msg.h>#include <sys/shm.h>#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
pthread_mutex_t H;
pthread_mutex_t K;
pthread_mutex_t M;
int task1()
{while(1){pthread_mutex_lock(&H);sleep(10);printf("高铁过去\n");pthread_mutex_unlock(&K);}
}
int task2()
{while(1){pthread_mutex_lock(&K);sleep(20);printf("快车过去\n");pthread_mutex_unlock(&M);}
}
int task3()
{while(1){pthread_mutex_lock(&M);sleep(40);printf("慢车过去\n");pthread_mutex_unlock(&H);}
}
void* thread_main_1(void* arg)
{task2();
}
void* thread_main_2(void* arg)
{task3();
}
int main(int argc, const char *argv[])
{pthread_mutex_init(&H,NULL);pthread_mutex_init(&K,NULL);pthread_mutex_init(&M,NULL);pthread_mutex_lock(&K);pthread_mutex_lock(&M);pthread_t id1,id2;pthread_create(&id1,0,thread_main_1,0);pthread_create(&id2,0,thread_main_2,0);task1();pthread_join(id1,NULL);pthread_join(id2,NULL);return 0;
}

4:使用条件变量实现一个生产者消费者模型(pv)模型
        生产者线程:每秒生成2个苹果
        消费者线程:没3秒消费 5~9个苹果
要求消费者在消费之前一定要有足够的苹果给消费

 #include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#include <wait.h>#include <signal.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/socket.h>#include <sys/ipc.h>#include <sys/sem.h>#include <semaphore.h>#include <sys/msg.h>#include <sys/shm.h>#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
pthread_cond_t cond1;
pthread_cond_t cond2;
pthread_mutex_t m;
int nump=0,numv=0;
int task1()
{while(1){pthread_mutex_lock(&m);pthread_cond_wait(&cond2,&m);while(nump-numv<0){nump+=2;sleep(1);}pthread_cond_signal(&cond1);pthread_mutex_unlock(&m);}
}
int task2()
{while(1){pthread_mutex_lock(&m);srand(time(0));sleep(3);numv=rand()%5+5;pthread_cond_signal(&cond2);pthread_cond_wait(&cond1,&m);printf("生产者共有%d个苹果\n",nump);printf("-----------------------------------------\n");nump-=numv;printf("消费者消费%d个苹果,生产者还剩%d个苹果\n",numv,nump);printf("-----------------------------------------\n");pthread_mutex_unlock(&m);}
}
void* task_main(void* arg)
{task2();
}
int main(int argc, const char *argv[])
{pthread_cond_init(&cond1,NULL);pthread_cond_init(&cond2,NULL);pthread_mutex_init(&m,NULL);pthread_t id;pthread_create(&id,0,task_main,0);task1();pthread_join(id,NULL);return 0;
}


http://www.ppmy.cn/embedded/154034.html

相关文章

Kotlin 快速上手指南:从安装 IntelliJ IDEA 到编写第一个程序

文章目录 什么是kotlinIntelliJ IDEA安装 IntelliJ IDEA创建 Kotlin 项目运行 Kotlin 程序更改进入后默认打开上一次项目的设置打开 IntelliJ IDEA进入设置:重新启动 IntelliJ IDEA:快速学习Kotlin变量声明类型推断条件表达式定义函数单表达式函数when 表达式when 语句的基本…

leetcode131.分割回文串

给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff1a;[["a","a","b"],["aa","b&…

MySQL 16 章——变量、流程控制和游标

一、变量 在MySQL数据库的存储过程和存储函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据 在MySQL数据库中&#xff0c;变量分为系统变量和用户自定义变量 &#xff08;1&#xff09;系统变量 1.1.1系统变量分类 变量由…

PPT素材免费下载

下载免费的PPT模板、素材、背景、图表、课件等等就上这6个网站&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&#xff0c;全…

06_Redis数据类型-List列表

1.List列表介绍 在Redis的List数据类型中,元素以字符串形式存在,并按照它们被插入的顺序进行有序排列。List允许元素重复,即相同元素可以被多次添加到列表中。每个List的容量上限为2的32次方减1,也就是4294967295个元素。我们可以添加一个新元素到List列表的头部(左边)或…

[微服务]redis数据结构

介绍 我们常用的Redis数据类型有5种&#xff0c;分别是&#xff1a; StringListSetSortedSetHash 还有一些高级数据类型&#xff0c;比如Bitmap、HyperLogLog、GEO等&#xff0c;其底层都是基于上述5种基本数据类型。因此在Redis的源码中&#xff0c;其实只有5种数据类型。 …

深度学习与通信技术的融合:未来的创新与机遇

目录 引言&#xff1a;深度学习与通信技术的结合深度学习在通信领域的应用深度学习与通信技术融合的前景与挑战博雅智信的辅导模式学术诚信声明 引言&#xff1a;深度学习与通信技术的结合 随着信息技术的飞速发展&#xff0c;深度学习在多个领域取得了显著进展。通信技术作为…

Redis:持久化机制

Redis 的持久化机制是确保数据在服务器重启后不会丢失的关键功能。它提供了两种主要的持久化方式:RDB(Redis Database Backup)快照和 AOF(Append Only File)日志记录。 1. RDB 快照(Redis Database Backup) 简介 概念:RDB 是 Redis 在指定的时间点将内存中的所有数据…