多进程计算质素

示例: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

posted @   *^VV^*  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示