#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <time.h> #define NUM_THREADS 10
#define buffer_size 6000000 void *thread_function(void *agr);
int buffer[buffer_size];
int result[NUM_THREADS];
int result1[NUM_THREADS]; int main() {
int res;
pthread_t a_thread[NUM_THREADS];
void *thread_result;
int lots_of_threads;
//static int buffer[60];
int i, m;
int tmp1;
int flag = 1;
struct timeval tv_start, tv_end;
//static int result[10]; for(i = 0; i < buffer_size; i++) {
buffer[i] = (int)rand() % 10000;
} gettimeofday(&tv_start, NULL);
for(i = 0; i < NUM_THREADS; i++) {
tmp1 = 0;
for(m = 0; m < buffer_size / NUM_THREADS; m++){
if(tmp1 < buffer[i * 10 + m])
tmp1 = buffer[i * 10 + m];
}
result1[i] = tmp1;
}
gettimeofday(&tv_end, NULL);
printf("Cost Time: %0.10fms\n", (float)((1000000 * (tv_end.tv_sec - tv_start.tv_sec) + tv_end.tv_usec - tv_start.tv_usec)/1000)); for(lots_of_threads = 0; lots_of_threads < NUM_THREADS; lots_of_threads++) {
res = pthread_create(&(a_thread[lots_of_threads]), NULL, thread_function, (void*)lots_of_threads);
if(res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
//sleep(1);
}
printf("Waiting for threads to finish.....\n");
for(lots_of_threads = NUM_THREADS - 1; lots_of_threads >= 0; lots_of_threads--) {
res = pthread_join(a_thread[lots_of_threads], &thread_result);
if(res == 0) {
printf("Picked up a thread\n");
} else {
perror("Pthread_join failed");
}
} for(m = 0; m < NUM_THREADS; m++) {
if(result[m] != result1[m])
flag = 0;
} if(!flag)
printf("Compute wrong~~~\n");
else
printf("Successful~~~\n"); printf("All done\n");
} void *thread_function(void *arg) {
//int my_number = *(int*) arg;
int my_number = (int)arg;
int rand_num;
int k;
int tmp = 0;
struct timeval tv_start, tv_end; gettimeofday(&tv_start, NULL);
for(k = 0; k < buffer_size / NUM_THREADS; k++) {
if(tmp < buffer[my_number * (buffer_size / NUM_THREADS) + k])
tmp = buffer[my_number * (buffer_size / NUM_THREADS) + k];
} result[my_number] = tmp; gettimeofday(&tv_end, NULL);
printf("Thread %d Cost Time: %0.10fms\n", my_number, (float)((1000000 * (tv_end.tv_sec - tv_start.tv_sec) + tv_end.tv_usec - tv_start.tv_usec)/1000)); printf("thread_function is running. Argument was %d\n", my_number);
//rand_num = 1 + (int)(9.0 * rand() / (RAND_MAX + 1.0));
//sleep(rand_num);
//printf("Rand number %d\n", rand_num);
//printf("Byte from %d\n", my_number);
pthread_exit(NULL);
}

多线程计算----pthread的更多相关文章

  1. 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  2. R中的apply族函数和多线程计算

    一.apply族函数 1.apply  应用于矩阵和数组 # apply # 1代表行,2代表列 # create a matrix of 10 rows x 2 columns m <- ma ...

  3. 多线程相关(pthread 、NSThread 、GCD、NSOperation)

    进程 进程是指在系统中正在运行的一个应用程序 线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 1个线程中任务的执行是串行的(执行完上一个才能执行下一个) 多线程 1个进程中可以 ...

  4. 多线程编程-pthread 未定义的引用

    多线程编程时用到函数库 pthread.h ,但是该函数库不是linux默认的函数库,所以编译c文件时,需要在目标代码文件后加上 -lpthread参数. 1.未加上 -lpthread 编译时,报错 ...

  5. 并发编程~~~多线程~~~计算密集型 / IO密集型的效率, 多线程实现socket通信

    一 验证计算密集型 / IO密集型的效率 IO密集型: IO密集型: 单个进程的多线程的并发效率高. 计算密集型: 计算密集型: 多进程的并发并行效率高. 二 多线程实现socket通信 服务器端: ...

  6. java多线程计算和

    如题:如何利用多线程实现1~1000000000的和 本文利用Callable可以返回值的特性,并将执行结果用CompletionService进行存储,最后将分步值累加. import java.u ...

  7. pthread 多线程基础

    本文主要介绍如何通过 pthread 库进行多线程编程,并通过以下例子进行说明. 基于莱布尼兹级数计算 \(\pi\) . 多线程归并排序 参考文章: [1] https://computing.ll ...

  8. pthread和semaphore的简单应用以及四个典型的多线程问题

    pthread和semaphore的简单应用以及四个典型的多线程问题 pthread常用函数简单介绍 创建线程 int  pthread_create(pthread_t  *  thread, pt ...

  9. 多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo

    多线程计算整型数组数据总和: #include <stdio.h> #include <stdlib.h> #include <Windows.h> #includ ...

随机推荐

  1. WCF消息交换模式之双工通讯(Duplex)

    WCF消息交换模式之双工通讯(Duplex) 双工通讯Duplex具有以下特点: 1它可以在处理完请求之后,通过请求客户端中的回调进行响应操作 2.消息交换过程中,服务端和客户端角色会发生调换 3.服 ...

  2. C语言库函数大全及应用实例五

    原文:C语言库函数大全及应用实例五                                                 [编程资料]C语言库函数大全及应用实例五 函数名: getcurdi ...

  3. unity多边形uv地图

    我曾经写过一篇文章,不规则图形uv地图.(http://blog.csdn.net/itolfn/article/details/17240131)我用三角算法.但是,这种方法已经不完全,有一个指明: ...

  4. Aspose.Words:如何添加另一个WORD文档中的Node对象

    原文:Aspose.Words:如何添加另一个WORD文档中的Node对象 首先看一段代码,这段代码意图从docSource中获取第一个表格,并插入docTarget的末尾: , true); doc ...

  5. POJ 3654 &amp; ZOJ 2936 &amp; HDU 2723 Electronic Document Security(模拟)

    题目链接: PKU:http://poj.org/problem?id=3654 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  6. 快速构建Windows 8风格应用30-应用生命周期管理

    原文:快速构建Windows 8风格应用30-应用生命周期管理 引言 Windows 8 中可以启动多个应用并在其中切换,我们没有必要担心降低系统速度或消耗电池电量. 因为系统会自动挂起(有时会终止) ...

  7. WEB开发中常用的正则表达式集合

    在计算机科学中,正则表达式用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在WEB开发中,正则表达式通常用来检测.查找替换某些符合规则的字符串,如检测用户输入E-mai格式是否正确,采集符 ...

  8. MySQL之GROUP BY用法误解

    1.说明  “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理.(只是简单说明这个 ...

  9. WP 开发中.xaml 与.xaml.cs

    关于 WP 开发中.xaml 与.xaml.cs 的关系   今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...

  10. 使用AdvancedInstaller打包web工程设置tomcat端口的方法

    原文:使用AdvancedInstaller打包web工程设置tomcat端口的方法 1.首先,要把你要打包的tomcat下的server.xml文件删掉,因为tomcat自带的serv ...