多线程编程实例

来源:互联网 发布:光纤网络监控方案 编辑:程序博客网 时间:2024/06/05 17:42


有四个线程1234。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:

A1 2 3 4 1 2....

B2 3 4 1 2 3....

C3 4 1 2 3 4....

D4 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;
}



0 0