多进程计算质素


示例:primer.c

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>

#define LEFT 30000000
#define RIGHT 30000200
#define THRNUM (RIGHT-LEFT+1)

typedef struct thread_arg_st //自定义结构体
{
  int i;
}targ_st;

static void *p_func(void *p);

int main()
{
  int i,err;
  pthread_t tid[THRNUM];
  targ_st *ptr;
  void *new;

  for(i=LEFT;i<=RIGHT;i++)  //循环创建线程
  {
    ptr = malloc(sizeof(targ_st));  //申请内存空间
    if(ptr ==NULL)
    {
      printf(“malloc error/n”);
      exit(1);
    }
    ptr->i = i;

    err = pthread_create(tid+(i-LEFT),NULL,p_func,ptr);  //创建线程并传递参数
    if(err)
    {
      fprintf(stderr,”pthread_create():%s/n”,strerror(err));
      exit(1);
    }
  }

  for(i=LEFT;i<=RIGHT;i++)  //等待线程结束
  {
    pthread_join(tid[i-LEFT],&new);  //接收线程返回值
    free(new);  //释放申请的空间
  }

  exit(0);
}

static void *p_func(void *p)  //线程主体
{
  int j,mark;
  int i = ((targ_st *)p)->i;  //提取传输的数据

  mark =0;
  for(j=2;j<i/2;j++)
  {
    if(i%j ==0)
    {
      mark =1;
      break;
    }
  }
  if(mark ==0)
  printf(“%d is primer/n”,i);

  pthread_exit(p);  //退出线程
}

 

编译文件:Makefile

CFLAGS +=-pthread
LDFLAGS +=-pthread

原创文章,作者:dweifng,如若转载,请注明出处:https://blog.ytso.com/276559.html

(0)
上一篇 2022年7月24日
下一篇 2022年7月24日

相关推荐

发表回复

登录后才能评论