多线程编程实例
来源:互联网 发布:光纤网络监控方案 编辑:程序博客网 时间:2024/06/05 17:42
有四个线程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;
}
- 多线程编程经典实例
- Qt多线程编程实例
- Linux多线程编程实例
- VC多线程编程实例
- 多线程编程实例
- C++ 多线程编程实例
- 多线程编程实例
- VC多线程编程实例
- 多线程编程 实例
- VC多线程编程实例
- C++ 多线程编程实例
- VC 多线程编程实例
- 多线程编程实例
- libevent多线程编程实例
- MFC多线程编程实例
- VC多线程编程实例
- 多线程编程实例练习
- 多线程编程实例
- 多线程编程
- 欢迎使用CSDN-markdown编辑器
- Firebase Cloud Messaging接入文档
- 新闻案例本地版(listview实现)
- 反射小例and可变参数
- 多线程编程实例
- 设计模式之策略模式
- Android中设置图片的圆形遮罩的几种方式
- 事件处理(Handling Events)和委托(Delegate)代码示例(一)【UE4】【C++】
- php和python请求socket服务器
- PHP的用法
- gnome-calculator TLS support is not available
- MD5+DES在C#.NET与Java/Android中的加解密使用
- IO流输入输出增强