当前位置:网站首页>IO process thread -> thread -> day5
IO process thread -> thread -> day5
2022-08-03 04:42:00 【Whale calls me to take care of the sea QAQ】
目录
二、Thread code to copy pictures
练习
1. 定义一个全局变量,char str[] = "123456",Two threads are required to be defined:线程A, 线程B
1). 要求AThe thread loop prints the global stringstr;
2). 要求BThe thread loop inverts the global stringstr:将strThe contents of are inverted as "654321",Inverted to"123456"....
注意:It is printed upside down, not upside down
3). 要求A线程打印出的str字符串内容为;123456或者654321.Out of order is not allowed,例如:623451 653451,,,、
2. Requires two threads to copy an image,AThe thread copies the first half,BThe thread copies the second half,不允许使用sleep函数,不允许使用flag.
一、Invert the thread
定义一个全局变量,char str[] = "123456",Two threads are required to be defined:线程A, 线程B
1. 要求AThe thread loop prints the global stringstr;
2. 要求BThe thread loop inverts the global stringstr:将strThe contents of are inverted as "654321",Inverted to"123456"....
注意:It is printed upside down, not upside down
3. 要求A线程打印出的str字符串内容为:123456或者654321
This time, a mutex is used
1.1 函数
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
char str[]="123456";
pthread_mutex_t mutex;
void* callback1(void* arg)
{
pthread_detach(pthread_self());
int len=strlen(str);
char temp;
while(1)
{
pthread_mutex_lock(&mutex);
for(int i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[len-i-1];
str[len-i-1]=temp;
}
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void* callback2(void* arg)
{
pthread_detach(pthread_self());
while(1)
{
pthread_mutex_lock(&mutex);
printf("str=%s\n",str);
pthread_mutex_unlock(&mutex);
}
}
int main(int argc, const char *argv[])
{
printf("程序开始\n");
if(pthread_mutex_init(&mutex,NULL) != 0)
{
perror("pthread_mutex_init");
return -1;
}
pthread_t tid1,tid2;
printf("The mutex was created successfully\n");
//创建线程
if(pthread_create(&tid1,NULL,callback1,NULL) != 0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&tid2,NULL,callback2,NULL) != 0)
{
perror("pthread_create");
return -1;
}
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
1.2 执行结果
二、Thread code to copy pictures
The difficulty lies in the created threadA与B,Not sure which one executes first,会导致,Only half of it will be copied.
I will create it firstA,等A执行完后,再创建B,再执行.
should be put in the codefd_r和fd_w定义成全局变量,This only needs to be executed in the main functionopen(打开文件)一次就好了,But I modified it for a long time to execute the result,不想再改了,Please modify as necessary.
2.1 函数
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
pthread_mutex_t mutex; //The variable that stores the mutex
char buf; //The variable used for storage when reading the file
void* cpy1(void* arg)
{
pthread_detach(pthread_self()); //自己分离自己,等线程退出后,Automatically reclaim thread resources
pthread_mutex_lock(&mutex); //上锁
int fd_r=open("./1.png",O_RDONLY);
int fd_w=open("./cpy.png",O_RDWR | O_CREAT | O_APPEND,0777);
if(fd_r<0 || fd_w<0)
{
perror("open");
return NULL;
}
off_t len=lseek(fd_r,0,SEEK_END);
printf("len=%ld\n",len);
lseek(fd_r,0,SEEK_SET);
lseek(fd_w,0,SEEK_SET);
for(int i=0;i<len/2;i++)
{
if(read(fd_r,&buf,1) <= 0)
{
perror("read");
return NULL;
}
write(fd_w,&buf,1);
}
close(fd_r);
close(fd_w);
pthread_mutex_unlock(&mutex); //解锁
pthread_exit(NULL); //结束线程
}
void* cpy2(void* arg)
{
pthread_detach(pthread_self());
pthread_mutex_lock(&mutex);
int fd_r=open("./1.png",O_RDONLY);
int fd_w=open("./cpy.png",O_RDWR | O_CREAT | O_APPEND,0777);
if(fd_r<0 || fd_w<0)
{
perror("open");
return NULL;
}
off_t len=lseek(fd_r,0,SEEK_END);
printf("len=%ld\n",len);
lseek(fd_r,len/2,SEEK_SET);
lseek(fd_w,len/2,SEEK_SET);
for(int i=len/2;i<len;i++)
{
if(read(fd_r,&buf,1) <= 0)
{
perror("read");
return NULL;
}
write(fd_w,&buf,1);
}
close(fd_r);
close(fd_w);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
2.2 执行结果
边栏推荐
- 2.何为张量
- 2022河南萌新联赛第(四)场:郑州轻工业大学 E - 睡大觉
- 数字孪生园区场景中的坐标知识
- MySql 创建索引
- Concepts and Methods of Exploratory Testing
- 荧光标记多肽FITC/AMC/FAM/Rhodamine/TAMRA/Cy3/Cy5/Cy7-Peptide
- excerpt from compilation book
- Can Oracle EMCC be installed independently?Or does it have to be installed on the database server?
- 接口测试实战| GET/POST 请求区别详解
- 社交电商:链动2+1模式,为什么能在电商行业生存那么久?
猜你喜欢
unity2D横板游戏教程6-敌人AI以及受击动画
Unity2D horizontal board game tutorial 6 - enemy AI and attack animation
Where is the value of testers
I ported GuiLite to STM32F4 board
打破传统电商格局,新型社交电商到底有什么优点?
【Harmony OS】【FAQ】Hongmeng Questions Collection 1
链动2+1模式简单,奖励结构丰厚,自主裂变?
BIOTIN ALKYNE CAS: 773888-45-2 Price, Supplier
【Harmony OS】【ARK UI】Date 基本操作
探索性测试的概念及方法
随机推荐
用户密码验证
接口测试框架实战 | 流程封装与基于加密接口的测试用例设计
数字化时代,企业如何建立自身的云平台与商业模式的选择?
Harmony OS Date ano UI 】 【 】 the basic operation
3.张量运算
Get the Ip tool class
Super handy drawing tool is recommended
8.电影评论分类:二分类问题
Online password generator tool recommendation
User password encryption tool
Assembly answers
【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
Unity2D horizontal board game tutorial 6 - enemy AI and attack animation
Shell之条件语句
【软件工程之美 - 专栏笔记】35 | 版本发布:软件上线只是新的开始
JS bottom handwriting
OpenFOAM extracts equivalency and calculates area
【HMS core】【Ads Kit】Huawei Advertising——Overseas applications are tested in China. Official advertisements cannot be displayed
StarRocks 7 月社区动态
MySQL 出现 The table is full 的解决方法