一、思维导图
二、练习题1
创建2子个进程:
父进程负责:向文件中写入数据
2个子进程负责:从文件中读取数据
要求:一定保证1号子进程先读取,2号子进程后读取。使用文件IO去实现。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <string.h>
void my_fwrite(const char* filename, const char* data)
{
int fw=open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0666);
ssize_t w=write(fw, data, strlen(data));
close(fw);
}
void my_fread(const char* filename, int pn)
{
int fr=open(filename, O_RDONLY);
char buf[100];
ssize_t r=read(fr, buf, sizeof(buf)-1);
buf[r]='\0';
printf("进程%d 读取%s\n", pn, buf);
close(fr);
}
int main()
{
pid_t pid1=fork();
pid_t pid2=fork();
my_fwrite("test.txt", "hello");
if(pid1==0)
{
my_fread("test.txt", 1);
}
if(pid2==0)
{
sleep(1);
my_fread("test.txt", 2);
}
wait(0);
wait(0);
return 0;
}
三、练习题2
创建一个线程(1个主线程和一个分支线程)
主线程负责:输入三角形的三条边长
分支线程负责:计算三角形的面积
(自己百度海伦公式:海伦公式里面要用到开平方 sqrt 函数,使用 sqrt 函数编译的时候需要在编译的最后加上 -lm ,这里随便怎么整,一定保证先输入数据,再计算面积。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <math.h>
void* cal_area(void* sides)
{
double* sidearr=(double*)sides;
double a=sidearr;
double b=sidearr;
double c=sidearr;
if(a+b<=c || a+c<=b || b+c<=a)
{
printf("无效三角形!\n");
}
double s=(a+b+c)/2;
double area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形面积为: %lf\n", area);
return NULL;
}
int main()
{
double sides;
pthread_t thread;
printf("输入三角形的三条边长:");
scanf("%lf %lf %lf", &sides,&sides,&sides);
if(pthread_create(&thread, NULL, cal_area, sides)!=0)
{
printf("无法创建线程!\n");
}
pthread_join(thread, NULL);
return 0;
}