当前位置: 首页 > news >正文

线程管理操作

1.创建两个线程,,分支线程1拷贝文件的前一部分,分支线程2拷贝文件的后一部分


#include <head.h>#define SRC_FILE "./1.txt"
#define DST_FILE "./2.txt"
#define BUFFER_SIZE 4096struct copy_args {long start;long end;
};void* copy_thread(void* arg) {struct copy_args* str= (struct copy_args*)arg;// 打开源文件和目标文件FILE* src = fopen(SRC_FILE, "rb");if (!src) {perror("Source file open failed");pthread_exit(NULL);}FILE* dst = fopen(DST_FILE, "wb+"); if (!dst) {perror("Target file open failed");fclose(src);pthread_exit(NULL);}fseek(src, str->start, SEEK_SET);fseek(dst, str->start, SEEK_SET);char buffer[BUFFER_SIZE];long remain = str->end - str->start;while (remain > 0) {size_t read_size = fread(buffer, 1, remain > sizeof(buffer) ? sizeof(buffer) : remain, src);if (read_size <= 0) break;size_t write_size = fwrite(buffer, 1, read_size, dst);if (write_size != read_size) {fprintf(stderr, "Write error\n");break;}remain -= read_size;}fclose(src);fclose(dst);return NULL;
}int main() {//检查文件状态获取结果struct stat st;if (stat(SRC_FILE, &st) != 0) {perror("Source file not found");exit(EXIT_FAILURE);}// 正确处理奇数长度文件long half = (st.st_size % 2 == 0) ? st.st_size / 2 : (st.st_size + 1) / 2;pthread_t t1, t2;// 动态分配参数内存(避免栈内存失效)struct copy_args* str1 = malloc(sizeof(struct copy_args));struct copy_args* str2 = malloc(sizeof(struct copy_args));*str1 = (struct copy_args){0, half};*str2 = (struct copy_args){half, st.st_size};pthread_create(&t1, NULL, copy_thread, str1);pthread_create(&t2, NULL, copy_thread, str2);pthread_join(t1, NULL);pthread_join(t2, NULL);// 释放动态分配的内存free(str1);free(str2);printf("File copy completed\n");return 0;
}

2.创建3个线程,线程A打印A,线程B打印B,线程C打印C,要求重复打印顺序ABC(分别使用信号量和条件变量实现)


#include <head.h>sem_t semA, semB, semC;void* threadA(void* arg) {while(1) {sem_wait(&semA);printf("FIA ");sem_post(&semB);}
}void* threadB(void* arg) {while(1) {sem_wait(&semB);printf("FIB ");sem_post(&semC);}
}void* threadC(void* arg) {while(1) {sem_wait(&semC);printf("FIC\n");sem_post(&semA);}
}int main() {sem_init(&semA, 0, 1);sem_init(&semB, 0, 0);sem_init(&semC, 0, 0);pthread_t tA, tB, tC;pthread_create(&tA, NULL, threadA, NULL);pthread_create(&tB, NULL, threadB, NULL);pthread_create(&tC, NULL, threadC, NULL);pthread_join(tA, NULL);pthread_join(tB, NULL);pthread_join(tC, NULL);
}
#include <head.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int state = 0;void* threadA(void* arg) {while(1) {pthread_mutex_lock(&mutex);while(state != 0) pthread_cond_wait(&cond, &mutex);printf("FIA ");state = 1;pthread_cond_broadcast(&cond);pthread_mutex_unlock(&mutex);}
}void* threadB(void* arg) {while(1) {pthread_mutex_lock(&mutex);while(state != 1)pthread_cond_wait(&cond, &mutex);printf("FIB ");state = 2;pthread_cond_broadcast(&cond);pthread_mutex_unlock(&mutex);}
}void* threadC(void* arg) {while(1) {pthread_mutex_lock(&mutex);while(state != 2)pthread_cond_wait(&cond, &mutex);printf("FIC\n");state = 0;pthread_cond_broadcast(&cond);pthread_mutex_unlock(&mutex);}
}int main() {pthread_t tA, tB, tC;pthread_create(&tA, NULL, threadA, NULL);pthread_create(&tB, NULL, threadB, NULL);pthread_create(&tC, NULL, threadC, NULL);pthread_join(tA, NULL);pthread_join(tB, NULL);pthread_join(tC, NULL);
}

相关文章:

线程管理操作

1.创建两个线程&#xff0c;&#xff0c;分支线程1拷贝文件的前一部分&#xff0c;分支线程2拷贝文件的后一部分 #include <head.h>#define SRC_FILE "./1.txt" #define DST_FILE "./2.txt" #define BUFFER_SIZE 4096struct copy_args {long start;l…...

VSCode 2025最新前端开发必备插件推荐汇总(提效指南)

&#x1f31f;前言: 如果你是一名前端开发工程师&#xff0c;合适的开发工具能大大提高工作效率。Visual Studio Code (VSCode) 凭借其轻量级、高扩展性的特点&#xff0c;已成为众多前端开发者在win系电脑的首选IDE。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。—…...

docker不停机部署

背景 最近做大疆项目时&#xff0c;后台更新部署时&#xff0c;机场和无人机就会掉线。设备自动重连注册时间比较长&#xff0c;应用长时间不可用。所以需要灰色发布服务。docker-compose的swarm模式可解决此问题。 服务构建脚本Dockerfile # 使用官方Java基础镜像&#xff…...

鸿蒙应用开发—数据持久化之SQLite

文章目录 SQLite简介创建数据库添加数据查询数据更新数据删除数据升级数据库使用事务参考 SQLite简介 SQLite是一个轻量级关系数据库&#xff0c;占用资源很少&#xff0c;只有几百KB的大小&#xff0c;无需服务器支撑&#xff0c;是一个零配置、事务性的SQL数据库引擎。 相对…...

JSON对象处理工具类

目录 1. 工具类的功能设计 2. 工具类的实现 依赖配置 工具类代码 3. 工具类的使用示例 示例1&#xff1a;美化JSON打印 示例2&#xff1a;从JSON中提取数据 示例3&#xff1a;修改JSON数据 示例4&#xff1a;合并JSON对象 4. 总结 在现代软件开发中&#xff0c;JSON&…...

通义万相 2.1 + 蓝耘算力,AI 视频生成的梦幻组合

在这个科技日新月异的时代&#xff0c;人工智能不断刷新着我们对世界的认知。一次偶然的机会&#xff0c;我借助北京蓝耘科技股份有限公司提供的算力支持&#xff0c;踏上了使用通义万相 2.1 进行 AI 视频生成的奇妙之旅。 目录 1.1初遇蓝耘科技&#xff1a; 1.2通义万相 2.1…...

汽车一键启动按钮更换注意事项

汽车一键启动开关更换教程 一键启动开关是现代汽车中常见的便捷配置&#xff0c;但随着时间的推移&#xff0c;这个部件可能会出现失灵的情况。当一键启动开关发生故障时&#xff0c;许多车主选择自行更换。以下是整理的一键启动开关更换教程&#xff1a; 更换前的准备 选择匹…...

AI系统架构

在AI系统架构中&#xff0c;通常可以分为基础设施层、模型层和应用层。它们分别对应不同的技术和应用场景&#xff0c;具体如下&#xff1a; 1. 基础设施层&#xff08;Infrastructure Layer&#xff09; 这是AI系统的底层支持&#xff0c;主要涉及计算资源、存储、网络等基础…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_01基础固定表头示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_01基础固定表头…...

spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0

使用 MyBatis-Plus 操作 books 表。我们将实现以下功能&#xff1a; 创建实体类 Book。 创建 Mapper 接口 BookMapper。 创建 Service 层 BookService 和 BookServiceImpl。 创建 Controller 层 BookController。 配置 MyBatis-Plus 和数据库连接。 1. 项目结构 src ├─…...

解决CentOS 8.5被恶意扫描的问题

CentOS 8 官方仓库已停止维护(EOL),导致一些常用依赖包如fail2ban 无法正常安装。 完整解决方案: 一、问题根源 CentOS 8 官方仓库已停更:2021 年底 CentOS 8 停止维护,默认仓库的包可能无法满足依赖关系。EPEL 仓库兼容性:EPEL 仓库可能未适配 CentOS 8.5 的旧版本依赖…...

laravel中 添加公共/通用 方法/函数

一&#xff0c;现在app 下面创建Common目录&#xff0c;然后在创建Common.php 文件 二&#xff0c;修改composer.json文件 添加这个到autoload 中 "files": ["app/Common/Common.php"]"autoload": {"psr-4": {"App\\": &quo…...

在vs中无法用QtDesigner打开ui文件的解决方法

解决方法 右键ui文件&#xff0c;选择打开方式&#xff0c;弹出如下界面。 点击添加&#xff0c;弹出如下界面 点击程序后边的三个点&#xff0c;去电脑查找designer.exe,我的位置为D:\Qt\Qt5.9.9\5.9.9\msvc2015_64\bin\designer.exe。 名称可以自己起一个名字&#xff0c…...

springboot 文件下载

在springboot中&#xff0c;执行如下代码实现文件下载 GetMapping("/file/download/test")public void Download(HttpServletResponse response){try {String path "XXXXXXXXXXXX";//文件路径File file new File(path);// 读到流中InputStream inputStre…...

Nest.js全栈开发终极实践:TypeORM+微服务+Docker构建高可用企业级应用

文章目录 **第一部分&#xff1a;认识Nest.js与基础环境搭建****1.1 什么是Nest.js&#xff1f;****1.2 环境准备****1.3 创建第一个项目****1.4 启动开发服务器****1.5 核心文件解读** **第二部分&#xff1a;基础控制器与路由****2.1 控制器的作用****2.2 创建自定义控制器**…...

Go语言集成DeepSeek API和GoFly框架文本编辑器实现流式输出和对话(GoFly快速开发框架)

说明 本文是GoFly快速开发框架集成Go语言调用 DeepSeek API 插件&#xff0c;实现流式输出和对话功能。为了方便实现更多业务功能我们在Go服务端调用AI即DeepSeek接口&#xff0c;处理好业务后再用Gin框架实现流失流式输出到前端&#xff0c;前端使用fetch请求接收到流式的mar…...

Hexo博客Icarus主题不蒜子 UV、PV 统计数据初始化配置

文章首发于 不蒜子 UV、PV 统计数据初始化配置 适用场景 如果你有个运行的网站域名&#xff0c;采用了不蒜子统计 UV、PV等访客和阅读数据&#xff0c;但是有一天&#xff0c;你觉得想要换一个新的域名。当你将网站绑定到新的域名后&#xff0c;突然发现&#xff0c;所有的文章…...

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧

目录 引言 一、历史中的非对称作战&#xff1a;从李牧到八路军的智谋传承 李牧戍边&#xff1a;古代军事博弈中的资源重构 八路军的游击战&#xff1a;现代战争中的智慧延续 二、创业界的逆袭之道&#xff1a;小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...

SQLAlchemy系列教程:如何执行原生SQL

Python中的数据库交互提供了高级API。但是&#xff0c;有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射&#xff08;ORM&#xff09;功能而闻名&#xff…...

绪论数据结构基本概念(刷题笔记)

&#xff08;一&#xff09;单选题 1.与数据元素本身的形式、相对位置和个数无关的是&#xff08;B&#xff09;【广东工业大学2019年829数据结构】 A.数据存储结构 B.数据逻辑结构 C.算法 D.操作 2.在数据结构的讨论中把数据结构从逻辑上分为&#xff08;C&#xff09;【中国…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...