#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. 在打包程序中自动安装SQL Server数据库 .

    原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...

  2. Wowza流媒体Live直播和VOD点播配置实战-attach

    Wowza是当今可以说最流行的流媒体服务器之一,近来因为需要搭建相应的服务器,但又不想用camera等作真实的直播,所以想办法用媒体文件转换成直播流再提供给Wowza进行直播.这里把该设置步骤以及设计 ...

  3. PS抠出树叶树枝

    1.打开PS 2.加载树叶树枝图片 3.双击该图层,来解锁树叶树枝图层 4.通道面板,只留下蓝色 5.顶部菜单 -> 图像 -> 计算 -> 混合为正片叠底,得到一个新Alpha图层 ...

  4. SQL去掉小数点有效数字后的所有0

    原文:SQL去掉小数点有效数字后的所有0 第一种方法 select cast(2.5000000000000   as  real) select cast(2   as  real) select ...

  5. CF:Problem 427C - Checkposts良好的沟通 Tarjan算法

    tarjan算法的第一个问题 喷我的脸....手写叠式开成BOOL,我一直在找错了... #include<cstdio> #include<cstring> #include ...

  6. Cocos2d-x 3.1.1开发环境

    Windows7上搭建Cocos2d-x 3.1.1开发环境   前言 现在,越来越多的公司采用Cocos2d-x 3.0来开发游戏了,但是现在这样的文章并不多,所以打算写一系列来帮助初学者快速掌握C ...

  7. 解决设置redmineblacklog的按钮无效问题

    安装了redemin+backlog后,想要设置backlog, 先用管理员登录,然后访问网页: http://localhost/settings/plugin/redmine_backlogs 发 ...

  8. Vijos: P1046观光旅游

    背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...

  9. 一个简单的Garbage Collector的实现

    一个简单的Garbage Collector的实现 前言: 最近看了google的工程师写的一个非常简单的垃圾收集器,大概200多行C代码,感叹大牛总能够把复杂的东西通过很简单的语言和代码表达出来.为 ...

  10. 手机APP下单支付序列图

    今天安装了Visio,学习了下如何使用,画了一下公司现在项目的下单支付序列图,话就不多说了,直接上图,处女作,欢迎指正!