📄 arrnsum.c
字号:
//创建多线程
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <pthread.h>#include "declare.h"void *parrnsum(void *arg);extern int array[ARRAY_SIZE];
//标示int array[ARRAY_SIZE]的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找int arrnsum (int count_length,int n){ int i,res, sum=0; //线程函数执行的返回值 struct COUNTPOINT cp[ARRAY_SIZE]; pthread_t parr[ARRAY_SIZE]; //线程标识符变量 int result; //线程执行的返回值 int pcl = count_length/n; if (n <= 0) {//如果要创建线程数N<=0时出错警告 printf("The thread number is error!\n"); exit(1); } for (i=0; i<(n-1); i++) { cp[i].start = pcl*i; cp[i].length = pcl;//数组的开始的下标,和数组长度 res = pthread_create(&parr[i],NULL,parrnsum,&cp[i]); /*创建线程*/ if (res!=0) { //创建线程失败 perror("Create Thread failed"); exit(EXIT_FAILURE); } } cp[i].start = pcl*i; cp[i].length = count_length-pcl*i; res = pthread_create(&parr[i],NULL,parrnsum,&cp[i]); /*创建线程*/ if (res!=0) { //创建线程失败 perror("Create Thread failed"); exit(EXIT_FAILURE); } for ( ; i>=0; i--) { res = pthread_join(parr[i],(void**)&result); sum += result;//线程归并,并求和 } return sum;}
//多线程数组数之和void *parrnsum(void *arg) { int i,sum=0; int* pa; struct COUNTPOINT cp; cp = *(struct COUNTPOINT*)arg; pa = array+cp.start; for (i=0; i<cp.length; i++) {//数组求和 sum += pa[i]; } pthread_exit((void*)sum);//退出线程}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -