多线程计算----pthread
#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的更多相关文章
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- R中的apply族函数和多线程计算
一.apply族函数 1.apply 应用于矩阵和数组 # apply # 1代表行,2代表列 # create a matrix of 10 rows x 2 columns m <- ma ...
- 多线程相关(pthread 、NSThread 、GCD、NSOperation)
进程 进程是指在系统中正在运行的一个应用程序 线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 1个线程中任务的执行是串行的(执行完上一个才能执行下一个) 多线程 1个进程中可以 ...
- 多线程编程-pthread 未定义的引用
多线程编程时用到函数库 pthread.h ,但是该函数库不是linux默认的函数库,所以编译c文件时,需要在目标代码文件后加上 -lpthread参数. 1.未加上 -lpthread 编译时,报错 ...
- 并发编程~~~多线程~~~计算密集型 / IO密集型的效率, 多线程实现socket通信
一 验证计算密集型 / IO密集型的效率 IO密集型: IO密集型: 单个进程的多线程的并发效率高. 计算密集型: 计算密集型: 多进程的并发并行效率高. 二 多线程实现socket通信 服务器端: ...
- java多线程计算和
如题:如何利用多线程实现1~1000000000的和 本文利用Callable可以返回值的特性,并将执行结果用CompletionService进行存储,最后将分步值累加. import java.u ...
- pthread 多线程基础
本文主要介绍如何通过 pthread 库进行多线程编程,并通过以下例子进行说明. 基于莱布尼兹级数计算 \(\pi\) . 多线程归并排序 参考文章: [1] https://computing.ll ...
- pthread和semaphore的简单应用以及四个典型的多线程问题
pthread和semaphore的简单应用以及四个典型的多线程问题 pthread常用函数简单介绍 创建线程 int pthread_create(pthread_t * thread, pt ...
- 多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo
多线程计算整型数组数据总和: #include <stdio.h> #include <stdlib.h> #include <Windows.h> #includ ...
随机推荐
- Google maps API开发
原文:Google maps API开发 Google maps API开发(一) 最近做一个小东西用到google map,突击了一下,收获不小,把自己学习的一些小例子记录下来吧 一.加载Googl ...
- Coreseek:索引和检测的第二步骤施工
1,非常索引easy,代码行 g:/service/coreseek/bin/indexer -c g:/service/coreseek/etc/csft_mysql.conf person 在 ...
- IOS开发之——使用SBJson拼接Json字符串
SBJson包的下载地址在上一篇文章中. 能够使用NSDictionary中的键值对来拼接Json数据,很方便,也能够进行嵌套,直接上代码: //開始拼接Json字符串 NSDictionary *d ...
- VC++.Net CAD编程架构
1.每个对应的菜单项的图形抽象的, 图形抽象基类, 取决于改变来自子(如矩形.椭圆形) 2.在Doc对象管理列表管理,图形对象,当图形需要重绘或序列存储,通过遍历该列表的对象可以是 3. 每个类的职责 ...
- 快速构建Windows 8风格应用11-语义缩放
原文:快速构建Windows 8风格应用11-语义缩放 本篇博文主要介绍为什么需要语义缩放.什么是语义缩放.如何构建语义缩放. 为什么需要语义缩放 如果用过Windows 8系统的开发者都知道在Win ...
- SQL点滴15—在SQL Server 2008中调用C#程序
原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...
- 使用Prism提供的类实现WPF MVVM点餐Demo
使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...
- 所有MVP文章
http://msdn.microsoft.com/zh-cn/dd346590.aspx
- JavaScript中的execCommand()命令详解及实例展示
execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用如下格式:document.execCommand(sCommand[,交互方式, 动态参数]) ,其 ...
- Ibatis 返回datatable数据类型案例
/// <summary> /// 查询实体 [DataSet数据集] /// </summary> /// <param name="statementNam ...