⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arrnsum.c

📁 这是一个很简单的在linux环境下的线程编程例子
💻 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 + -