多线程处理

news2025/1/9 15:07:26

1、使用两个线程完成两个文件的拷贝,分支线程1拷贝前一半,分支线程2拷贝后一半,主线程回收两个分支线程的资源

#include<myhead.h>

struct Buf
{
    int start;//起始位置
    int end;//结束位置
    const char *arr;//源文件
    const char *brr;//目标文件
};
//判断文件长度
int size(const char *arr,const char *brr)
{
    //打开源文件
    int pd1=-1;
    if((pd1=open(arr,O_RDONLY))==-1)
    {
        perror("open error");
        return -1;
    }
    //打开目标文件
    int pd2=-1;
    if((pd2=open(brr,O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)
    {
        perror("open error");
        return -1;
    }
    int size=lseek(pd1,0,SEEK_END);//求出pd1的文件字符数
    close(pd1);
    close(pd2);
    return size;
}

void *task(void *arg)
{
    //数据读取
    int start=((struct Buf*)arg)->start;
    int end=((struct Buf*)arg)->end;
    const char *arr;
    const char *brr;
    arr=((struct Buf*)arg)->arr;
    brr=((struct Buf*)arg)->brr;
    //printf("%s\n",arr);
    //打开源文件
    int pd1=-1;
    if((pd1=open(arr,O_RDONLY))==-1)
    {
        perror("open error");
        pthread_exit(NULL);
    }
    //打开目标文件
    int pd2=-1;
    if((pd2=open(brr,O_WRONLY))==-1)
    {
        perror("open error");
        pthread_exit(NULL);
    }
    //偏移位置
    lseek(pd1, start, SEEK_SET);
    lseek(pd2, start, SEEK_SET);
    //定义搬运工
    char buf[128]="";
    //定义读取数量
    int sum=start;
    while(1)
    {
        int src=read(pd1,buf,sizeof(buf));//读取
        sum+=src;//记录读取个数
        if(src==0||sum>end)//退出条件
        {
            write(pd2,buf,src-sum+end);
            break;
        }
        write(pd2,buf,src);
    }
    pthread_exit(NULL);
}

int main(int argc,const char *argv[])
{
    //判断文件数量
    if(argc!=3)
    {
        printf("input_file error\n");
        return -1;
    }
    //判断文件长度
    int len=size(argv[1],argv[2]);
    printf("%d\n",len);
    //将数据写入结构体内部
    struct Buf buf1={0,len-len/2,argv[1],argv[2]};
    struct Buf buf2={len/2,len,argv[1],argv[2]};
    //创建线程1
    pthread_t pid1=0;
    if(pthread_create(&pid1,NULL,task,&buf1)!=0)
    {
        printf("pthread_create error\n");
        return 0;
    }
    
    //创建线程2
    pthread_t pid2=0;
    if(pthread_create(&pid2,NULL,task,&buf2)!=0)
    {
        printf("pthread_create error\n");
        return 0;
    }
    //分离
    pthread_join(pid1,NULL);
    pthread_join(pid2,NULL);
    return 0;
}

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

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

相关文章

Spring-component-scan标签详解

<context:component-scan base-package"cn.ybzy.springtest"/> 首先&#xff0c;这标签是需要context的命名空间的。 base-package&#xff1a; 指定spring扫描注解的类所在的包。当需要扫描多个包的时候&#xff0c;可以使用逗号分隔。 如果只希望扫描特定…

Linux防火墙2

一、SNAT和DNAT SNAT&#xff1a;让内网机器可以访问外网服务器 DNAT: 让外网机器可以访问内网服务器 1.1、SNAT原理与应用 SNAT 应用环境 局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)&#xff0c;私转公 SNAT原理:源地址转换&#xff0c;…

水平直逼高级病理学家!清华团队提出AI基础模型ROAM,实现胶质瘤精准诊断

胶质瘤是一种源自脑内神经胶质细胞的肿瘤&#xff0c;占据所有原发性中枢神经系统肿瘤的 40&#xff05;~60&#xff05;&#xff0c;并以成年人最常见的颅内原发性肿瘤而闻名。胶质瘤的组织病理分类非常复杂&#xff0c;通常分为三种亚型&#xff1a;星形细胞瘤、少突胶质细胞…

使用go的tls库搭建客户端服务器加密通信

文章目录 使用OpenSSL生成证书Win系统安装openssl生成证书 非HTTP 直接tcp通信服务器代码客户端代码通信效果 使用OpenSSL生成证书 Win系统安装openssl 安装地址 https://slproweb.com/products/Win32OpenSSL.html设置环境变量 cmd命令检验 openssl version 生成证书 生成C…

2024.7.28 记录一次悲惨的笔试——作业帮NLP校招

小红的奇偶抽取 题目描述 题解 #include <iostream> #include<stack> using namespace std;int main() {long long n;stack <int> ji, ou;cin >> n;while (n) {int a n % 10;if (a % 2 0)ou.push(a);elseji.push(a);n n / 10;}long long jN 0, o…

Spring Cloud中怎么使用Resilience4j Retry对OpenFeign进行重试

在微服务架构中&#xff0c;服务之间的通信是非常频繁的。而使用OpenFeign可以极大简化微服务之间的HTTP通信。但在复杂的分布式系统中&#xff0c;服务之间的调用可能会因为网络问题、服务故障等原因而失败。因此&#xff0c;实现服务调用的重试机制显得尤为重要。Resilience4…

DDR3的使用(四)利用XILINX MIGIP核(native)读写DDR3—IP核信号分析

我们这一节继续结合仿真波形和逻辑分析仪测试波形来分析下MIGIP核的各个信号使用&#xff0c;这里主要说的是用户端的信号&#xff0c;这些信号直接与ip核进行交互&#xff0c;只有正确使用才能按我们的要求来读写数据。 1.我们先打开modelsim仿真软件&#xff0c;查看下examp…

机器学习笔记 - RAFT 光流简读

一、光流 光流是图像序列中像素的表观运动。为了估计光流,场景中物体的移动必须具有相应的亮度位移。这意味着一个图像中移动的红球在下一个图像中应该具有相同的亮度和颜色,这使我们能够确定它以像素为单位移动了多少。下图显示了光流示例,其中一系列图像捕获了逆时针旋转的…

使用 宝塔面板 部署 语料库php网站

【语料库网站】宝塔面板 在线部署全过程 代码仓库&#xff1a;https://github.com/talmudmaster/RedCorpus 网站介绍 语料库提供双语文本检索和分享功能。供英语、翻译相关专业的爱好者&#xff0c;学生和老师学习使用。 该网站是对BiCorpus开源项目的二次开发。 技术栈&am…

一文全面了解高性能计算平台是什么、怎么选型?高性能计算平台CHPC 都能做什么?

一. 概述 随着技术的发展和数据量的爆炸性增长&#xff0c;企业面临的挑战日益复杂&#xff0c;对计算能力的需求也在不断增加。这些问题的解决超出了传统计算方法的能力范围&#xff0c;高性能计算&#xff08;HPC&#xff09;正是为解决这类问题而生。 高性能计算&#xff…

怎么锁定Word文档格式,保护文档完整性

在日常工作和学习中&#xff0c;我们经常会使用Word文档来编辑和保存重要信息。然而&#xff0c;在文档被多人编辑或分享的过程中&#xff0c;格式的意外变动往往会给后续工作带来不必要的麻烦。为了确保文档的格式在编辑和分享过程中保持不变&#xff0c;我们可以采取一些措施…

2024还有跨境玩家没解锁代理IP+设备多开模式的强大吗?

大多数跨境电商平台对于IP地址、浏览器环境等限制严格。若同一台电脑在同一个跨境电商平台注册多个账号&#xff0c;很容易被官方封禁。如何在不触发官方封禁机制的前提下&#xff0c;安全高效地开展多账号运营策略&#xff0c;成为了众多跨境电商从业者亟待解决的问题。本文将…

jenkins集成jmeter

jenkins 安装插件HTML Publisher startup trigger Groovy 脚本介绍 cd /app/jmeter rm -rf result.jtl jmeter.log report mkdir -p report sh /app/jmeter/apache-jmeter-5.6.3/bin/jmeter.sh -n -t test.jmx -l result.jtl -e -o ./report-n: 表示以非 GUI 模式运行 JMete…

堆的创建和说明

文章目录 目录 文章目录 前言 小堆&#xff1a; 大堆&#xff1a; 二、使用步骤 1.创建二叉树 2.修改为堆 3.向上调整 结果实现 总结 前言 我们已经知道了二叉树的样子&#xff0c;但是一般的二叉树是没有什么意义的&#xff0c;所以我们会使用一些特殊的二叉树来进行实现&a…

齿轮端面重合度学习笔记分享

我们知道两个渐开线圆柱齿轮能够正确啮合&#xff0c;他们的基节相等是正常传动的必要但不处分条件。由于轮齿的高度有限&#xff0c;啮合的区间有限&#xff0c;齿轮能否连续传动还要看轮齿对能否及时接替&#xff0c;即前一对轮齿脱离啮合时&#xff0c;后一对轮齿是否已进入…

uniapp结合uview-ui创建项目关键步骤一步一图教程

文章目录 1 构建项目准备工作2 项目创建2.1 打开开发者工具HBuilderX2.2 创建一个新的项目2.3 引入uview-ui组件2.4 uview-ui组件配置2.4.1 uview-ui组件简单介绍2.4.2 修改main.js2.4.3 修改page.json2.4.4 修改App.vue2.4.5 修改uni.scss2.4.6 修改index.vue 2.5 api接口封装…

antv x6使用Vue+ElementPlus实现右键菜单

基于X6官方给出的React版的右键菜单示例&#xff0c;实现Vue版本的&#xff0c;其中右键菜单使用的是ElMenu的样式。 import { ToolsView } from antv/x6 import { h, render } from vue import { ElMenu, ElMenuItem } from element-plus export class ContextMenuTool exten…

公司的Spring框架接受MIME类型为json格式的带null的字符串,然后这个带null的字段被自动忽略了,排查了好久

接收方法&#xff1a; 解决方案&#xff1a; 先去掉RequsetBody 因为使用RequsetBody时&#xff0c;框架会调用HttpMessageConvert读取HttpRequest的InputStram反序列化为对象&#xff0c;这个InputStram只能读一次。 后续你的代码再通过Reader读输入流时&#xff0c;已经没有…

小米SU7对手来了,魅族汽车今年上市

新能源车市场竞争白热化的 2024 年&#xff0c;那些当初一股脑扎堆入场的各路新势力们&#xff0c;估计压根没想到造个车也能这么卷吧&#xff01; 还是那句话&#xff0c;当一个行业开始极度内卷&#xff0c;也就意味着已经到了整个淘汰赛最残酷的环节。 目前来说&#xff0…