IO进程线程第六天(8.3)线程,线程函数+XMind

news2024/11/15 13:49:30

创建两个线程:其中一个线程拷贝前半部分,另一个线程拷贝后半部分。

只允许开一份资源,且用互斥锁方式实现。

#include<stdio.h>
#include<head.h>
#include<pthread.h>
struct file
{
    int fp; 
    int fq; 
    off_t size;
};
pthread_mutex_t suo;
void* buf1(void* arg)
{
    char c;
    int fp=((struct file*)arg)->fp;
    int fq=((struct file*)arg)->fq;
    off_t size=((struct file*)arg)->size;
    pthread_mutex_lock(&suo);
    lseek(fp,0,SEEK_SET);
    lseek(fq,0,SEEK_SET);
    for(int i=0;i<size/2;i++)//循环读写,一个一个读,一个一个写,写前一半部分
    {   
        read(fp,&c,1);
        write(fq,&c,1);
    }   
    printf("前半部分拷贝完毕\n");
    pthread_mutex_unlock(&suo);
    pthread_exit(NULL);
}
void* buf2(void* arg)
{
    char c;
    int fp=((struct file*)arg)->fp;
    int fq=((struct file*)arg)->fq;
    off_t size=((struct file*)arg)->size;
    pthread_mutex_lock(&suo);
    lseek(fp,size/2,SEEK_SET);
    lseek(fq,size/2,SEEK_SET);
    for(int i=(size/2);i<size;i++)//循环读写,一个一个读,一个一个写,写后一半部分
    {   
        read(fp,&c,1);
        write(fq,&c,1);
    }   
    printf("后半部分拷贝完毕\n");
    pthread_mutex_unlock(&suo);
    pthread_exit(NULL);
}

int main(int argc, const char *argv[])
{
    pthread_mutex_init(&suo,NULL);
    int fp=open("/home/ubuntu/图片/下午 趴在桌子的女孩4k动漫壁纸3840x2160_彼岸图网.jpg",O_RDONLY);//打开要拷贝的图片
    if(fp<0)
    {   
        ERR_MSG("fp open");
        return -1; 
    }   
    int fq=open("1.jpg",O_WRONLY|O_CREAT|O_TRUNC,0664);//打开拷贝成的图片
    if(fq<0)
    {   
        ERR_MSG("fq open");
        return -1; 
    }   
    off_t size=lseek(fp,0,SEEK_END);
    struct file ph; 
    ph.fp=fp;
    ph.fq=fq;
    ph.size=size;
    pthread_t pt1;//创建子线程
    if(pthread_create(&pt1,NULL,buf1,(void *)&ph)!=0)//判断线程是否创建成功
    {   
        fprintf(stderr,"errno");
        return -1; 
    }   
    pthread_t pt2;//创建子线程
    if(pthread_create(&pt2,NULL,buf2,(void *)&ph)!=0)//判断线程是否创建成功
    {   
        fprintf(stderr,"errno");
        return -1; 
    }   
    pthread_join(pt1,NULL);
    pthread_join(pt2,NULL);
    pthread_mutex_destroy(&suo);                                                                                                                                                                                                                                                         
    close(fp);//关闭被拷贝的图片
    close(fq);//关闭拷贝的图片

    return 0;
}  

 

 

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

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

相关文章

什么?你还没有用过JPA Buddy,那么你工作肯定没5年

1. 概述 JPA Buddy是一个广泛使用的IntelliJ IDEA插件&#xff0c;面向使用JPA数据模型和相关技术&#xff08;如Spring DataJPA&#xff0c;DB版本控制工具&#xff08;Flyway&#xff0c;Liquibase&#xff09;&#xff0c;MapStruct等&#xff09;的新手和有经验的开发人员…

投资圈爆火的文心杯创业大赛,大模型三大趋势值得关注!

“百模大战”打响&#xff0c;掀起大模型领域“创业热潮”。今年5月31日&#xff0c;百度启动“文心杯”创业大赛&#xff08;后简称“大赛”&#xff09;&#xff0c;不到1个月报名时间&#xff0c;吸引近1000个项目激烈角逐&#xff0c;在知名投资人和AI专家的权威评审和层层…

8 网络通信(下)

文章目录 wireshark 抓包工具的快速入门TCP/IP 协议详解TCP/IP 协议概述部分协议补充 OSI 参考模型及 TCP/IP 参考模型以太网帧格式ARP 数据报格式IP 段格式ICMP 协议TCP协议UDP 协议MTU和MSS补充 产品模式【C/S B/S】C/S 模式B/S 模式 DDOS简单介绍&#xff08;SYN Flooding&a…

【暑期每日一练】 day13

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一…

Spring Cloud Feign+Ribbon的超时机制

在一个项目中&#xff08;数据产品&#xff09;&#xff0c;需要对接企业微信中第三方应用。在使用 Feign 的去调用微服务的用户模块用微信的 code 获取 access_token 以及用户工厂信息时出现 Feign 重试超时报错的情况&#xff0c;通过此篇文章记录问题解决的过程。 一、问题重…

探究Vue源码:mustache模板引擎(9) 将单层无喜欢结果tokens转为dom字符串

好 我们前面几篇文章 已经编写完了 将dom结构的模板字符串转为 tokens 数据结构的代码 那么 现在 我们就需要用tokens 结合数据 去生成dom字符串 我们先来研究一下我们的模板字符串与数据结构 首先 数据从这个data中去拿 然后 模板字符串语句中 先是 利用对象中的students 循环…

redis五种数据类型介绍

、string&#xff08;字符串&#xff09; 它师最基本的类型&#xff0c;可以理解为Memcached一模一样的类型&#xff0c;一个key对应一个value。 注意&#xff1a;一个键最大能存储 512MB。 特性&#xff1a;可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512…

【动态规划算法】-回文串问题题型(34-40题)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

动态规划笔记(一)

动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是求解决策过程最优化的过程&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题&#xff0c;在数学、管理科学、计算机科学、经济学和生物信息学等领域被广泛使用。 它的基本思想非常简单&…

SpringBoot整合Caffeine

一、Caffeine介绍 1、缓存介绍 缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存&#xff0c;到客户端的页面缓存&#xff0c;处处都存在着缓存的身影。缓存从本质上来说&#xff0c;是一种空间换时间的手段&#xff0c;通过对数据进行一定的空间安排&#xff0c;使得下…

java:解决报错非法字符: ‘\ufeff‘以及什么是BOM

背景 运行 JAVA 项目后&#xff0c;报错提示&#xff1a;非法字符: \ufeff&#xff0c;如图&#xff1a; 但是我在这个报错的文件中并没有搜到这个字符&#xff0c;那到底是什么原因 什么是BOM BOM&#xff08;Byte Order Mark&#xff09;&#xff0c;隐藏字符&#xff0c…

5、二叉树

二叉树遍历 递归序 public static void f(Node head) {if (head == null) {return;}f(head.left);f(head.right); }前中后遍历_递归 public static void preOrderRecur(Node head) {if (head == null) {return;}System.out.print(head.value + " ");preOrderRecur…

智慧防汛,数字科技的力量

随着夏日的脚步临近&#xff0c;台风季节即将降临。对于那些居住在沿海地区的人们来说&#xff0c;台风是一种常见的自然灾害&#xff0c;其带来的风雨可能对生命和财产造成严重威胁。然而&#xff0c;随着数字科技的飞速发展&#xff0c;可视化技术为防汛抗台工作带来了全新的…

6个非常实用的漫画素材网站,设计师必看

对于漫画设计师来说&#xff0c;漫画素材网站是必不可少的&#xff0c;今天本文将与大家分享6个好用的漫画素材网站&#xff0c;帮助设计师实现优质创作&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时设计是更适合国内设计师使用的图像设计工具&#xff0c;在它的【…

if语句实现成绩等级判断

if语句实现成绩等级判断 案例分析代码实现小结Time 案例分析 使用键盘输入一个成绩&#xff0c;然后通过if判断语句实现成绩等级的判断 代码实现 import java.util.Scanner;public class DetermineDemo {public static void main(String[] args) {Scanner scanner new Scanne…

在线五子棋对战

目录 数据管理模块&#xff08;数据库设计&#xff09; 前端界面模块 业务处理模块 会话管理模块网络通信模块(session,cookie) 在线管理模块 房间管理模块 用户匹配模块 项目扩展 数据管理模块&#xff08;数据库设计&#xff09; 数据库中有可能存在很多张表&#xf…

SystemC的调度器

文章目录 前言调度器初始化evaluatewait updatenotify delta notificationtime notification仿真结束 前言 SystemC是基于C的库&#xff0c;主要用来对 IC 进行功能建模和性能建模。有时也被用来当做 RTL (register transfer level) 级的升级版 HLS(High Level synthesis) 直接…

Hadoop-HDFS的Namenode及Datanode(参考Hadoop官网)

HDFS有什么特点&#xff0c;被设计做什么 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。有一下几个特点&#xff1a; HDFS是一个高度容错性的系统&#xff0c;具有高容错、高可靠性、高扩展性的特点&#xff0c;适合部…

【卡尔曼滤波】用Python实现卡尔曼滤波效果,Python

文章目录 纯python基于pykalman 库 纯python 以下是一个简单的Python示例&#xff0c;演示了如何使用NumPy库实现一个一维卡尔曼滤波器。 import numpy as np import matplotlib.pyplot as pltdef kalman_filter(initial_state, initial_estimate_error, process_variance, me…

机器学习笔记 - 使用 YOLOv5、O​​penCV、Python 和 C++ 检测物体

一、YOLO v5简述 YOLO v5虽然已经不是最先进的对象检测器,但是YOLOv5 使用了一个简单的卷积神经网络 CNN架构(相对YOLO v8来讲,不过v8精度是更高了一些),更易理解。这里主要介绍如何轻松使用 YOLO v5来识别图像中的对象。将使用 OpenCV、Python 和 C++ 来加载和调用我们的…