有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:
A:1 2 3 4 1 2....
B:2 3 4 1 2 3....
C:3 4 1 2 3 4....
D:4 1 2 3 4 1....
程序:
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include<unistd.h>
#include<fcntl.h>
int fd1,fd2,fd3,fd4; //之后要写的四个文件的文件描述符,定义为全局变量可所有函数都用
void *func1(void*) //线程1执行,在四个文件中写入符号
{
int real_w;
int i;
for(i = 1; i < 5; i++)
{
real_w = write(fd1,"1",1);
real_w = write(fd2,"2",1);
real_w = write(fd3,"3",1);
real_w = write(fd4,"4",1);
if(real_w == 1)
{
printf("write fd1 sucessfuly\n"); //每次循环休眠一秒,此一秒内其他进程会执行
sleep(1);
}
}
}
void *func2(void*) //线程2执行,同上
{
int real_w;
int i;
for(i = 1; i < 5; i++)
{
real_w = write(fd1,"2",1);
real_w = write(fd2,"3",1);
real_w = write(fd3,"4",1);
real_w = write(fd4,"1",1);
if(real_w == 1)
{
printf("write fd2 sucessfuly\n");
sleep(1);
}
}
}
void *func3(void*) //线程3执行,同上
{
int real_w;
int i;
for(i = 1; i < 5; i++)
{
real_w = write(fd1,"3",1);
real_w = write(fd2,"4",1);
real_w = write(fd3,"1",1);
real_w = write(fd4,"2",1);
if(real_w == 1)
{
printf("write fd3 sucessfuly\n");
sleep(1);
}
}
}
void *func4(void*) //线程4执行,同上
{
int real_w;
int i;
for(i = 1; i < 5; i++)
{
real_w = write(fd1,"4",1);
real_w = write(fd2,"1",1);
real_w = write(fd3,"2",1);
real_w = write(fd4,"3",1);
if(real_w == 1)
{
printf("write fd4 sucessfuly\n");
sleep(1);
}
}
}
int main()
{
int ret;
pthread_t id1,id2,id3,id4;
fd1 = open("A.text",O_CREAT|O_RDWR,0644); //打开A,B,C,D四个文件,并进行错误处理
if (-1 == fd1)
{
printf("open A fail");
exit(-1);
}
fd2 = open("B.text",O_CREAT|O_RDWR,0644);
if (-1 == fd1)
{
printf("open B fail");
exit(-1);
}
fd3 = open("C.text",O_CREAT|O_RDWR,0644);
if (-1 == fd1)
{
printf("open c fail");
exit(-1);
}
fd4 = open("D.text",O_CREAT|O_RDWR,0644);
if (-1 == fd1)
{
printf("open D fail");
exit(-1);
}
ret = pthread_create(&id1,NULL,func1,NULL);
if (-1 == ret)
{
printf("create thread fail");
exit(-1);
}
ret = pthread_create(&id2,NULL,func2,NULL);
if (-1 == ret)
{
printf("create thread fail");
exit(-1);
}
ret = pthread_create(&id3,NULL,func3,NULL);
if (-1 == ret)
{
printf("create thread fail");
exit(-1);
}
ret = pthread_create(&id4,NULL,func4,NULL);
if (-1 == ret)
{
printf("create thread fail");
exit(-1);
}
pthread_join(id1,NULL); //等待线程结束,必须有,否则进程结束,所以线程未结束也将结束
pthread_join(id2,NULL);
pthread_join(id3,NULL);
pthread_join(id4,NULL);
return 0;
}