第一个多线程程序——使用pthread
来源:互联网 发布:禁用usb接口软件 编辑:程序博客网 时间:2024/05/23 22:08
最近学习并行算法,先看了看pthread多线程编程。今天写了第一个算法,就是求10000个数的和。算法很简单,用了两个线程,第一个求前5000个数的和,第二个求后5000个的和,然后把两个线程的结果加起来。
程序如下:
#include <pthread.h>
#include <cstdlib>
#include <iostream>
using namespace std;
#define NUM_THREAD 2
// 线程调用的函数的参数
struct add_arg
{
int* data;
int size;
int left;
int right;
int* sum;
};
//计算序列的和,这个函数由线程调用
void *add(void* addarg)
{
struct add_arg *arg;
arg = (struct add_arg*)addarg;
int i;
arg->sum[0] = 0;
cout<<arg->size<<" "<<arg->left<<" "<<arg->right<<endl;
for(i=arg->left;i<=arg->right;i++)
arg->sum[0] += arg->data[i];
cout<<arg->sum[0]<<endl;
}
//序列求和的算法,包含两个线程
int addnum(int *A, int size)
{
int i;
struct add_arg arg[2];
arg[0].data = A;
arg[0].size = size;
arg[0].left = 0;
arg[0].right = int(size/2);
arg[0].sum = new int;
arg[1].data = A;
arg[1].size = size;
arg[1].left = arg[0].right+1;
arg[1].right = size-1;
arg[1].sum = new int;
pthread_t thread[2];
int rc;
for(i=0;i<2;i++){
//创建线程
rc = pthread_create(&thread[i],NULL,add,(void* )&arg[i]);
//等待线程完成
pthread_join(thread[i],NULL);
}
cout<<arg[0].sum[0]+arg[1].sum[0]<<endl;
return *arg[0].sum+*arg[1].sum;
}
int main()
{
int* A = new int[10000];
int i;
for(i=0;i<10000;i++){
if(i%2==0) A[i] = i;
else A[i] = i;
}
int sum = addnum(A,10000);
cout<<"the sum is : "<<sum<<endl;
}
这个程序中包含了两个多线程函数:
程序如下:
#include <pthread.h>
#include <cstdlib>
#include <iostream>
using namespace std;
#define NUM_THREAD 2
// 线程调用的函数的参数
struct add_arg
{
int* data;
int size;
int left;
int right;
int* sum;
};
//计算序列的和,这个函数由线程调用
void *add(void* addarg)
{
struct add_arg *arg;
arg = (struct add_arg*)addarg;
int i;
arg->sum[0] = 0;
cout<<arg->size<<" "<<arg->left<<" "<<arg->right<<endl;
for(i=arg->left;i<=arg->right;i++)
arg->sum[0] += arg->data[i];
cout<<arg->sum[0]<<endl;
}
//序列求和的算法,包含两个线程
int addnum(int *A, int size)
{
int i;
struct add_arg arg[2];
arg[0].data = A;
arg[0].size = size;
arg[0].left = 0;
arg[0].right = int(size/2);
arg[0].sum = new int;
arg[1].data = A;
arg[1].size = size;
arg[1].left = arg[0].right+1;
arg[1].right = size-1;
arg[1].sum = new int;
pthread_t thread[2];
int rc;
for(i=0;i<2;i++){
//创建线程
rc = pthread_create(&thread[i],NULL,add,(void* )&arg[i]);
//等待线程完成
pthread_join(thread[i],NULL);
}
cout<<arg[0].sum[0]+arg[1].sum[0]<<endl;
return *arg[0].sum+*arg[1].sum;
}
int main()
{
int* A = new int[10000];
int i;
for(i=0;i<10000;i++){
if(i%2==0) A[i] = i;
else A[i] = i;
}
int sum = addnum(A,10000);
cout<<"the sum is : "<<sum<<endl;
}
这个程序中包含了两个多线程函数:
int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void
*(*start_routine) (void *), void *arg) ;
创建一个线程
他的文档可以参考这里
int pthread_join (pthread_t thread, void **value_ptr);
他的文档可以参考这里
g++ -pthread add.cpp -o add
./add
运行结果如下:
10000 0 5000
12502500
10000 5001 9999
37492500
49995000
the sum is : 49995000
- 第一个多线程程序——使用pthread
- 多线程 ——pthread
- 第一个LINUX多线程程序
- pthread使用(多线程002)
- Linux编程实践----第一个多线程程序
- iOS 多线程 pthread的简单使用——iOS 编码复习(五)(多线程3)
- 【Linux】【多线程】【Research_Record】pthread使用
- 网络多线程-pthread的使用
- [C#]第一个程序——HelloWorld
- 入门——第一个android程序
- DX11——第一个程序:Box
- Android第一个程序——打招呼
- QT——第一个QT程序
- yii——第一个程序
- 第一个Hadoop程序——WordCount
- 第一个MapReduce程序——WordCount
- 第一个Android程序——计算器
- React ——第一个程序
- 如何为加盟Google做准备(李开复)
- css中不常用到的标识方法
- 帝国时代(1)--献给曾经的游戏
- 网页重定位与获取引用方url
- 利用sqlcommandbulider写sql语句
- 第一个多线程程序——使用pthread
- OOD启思录 笔记
- 抢先试用MyEclipse4.1GA的AJAX和Web2新特性
- 敏捷开发横空出世 以人为本颠覆软件工程(转贴)
- 创建透明窗口
- 敏捷开发以及开发人员与数据库管理员的联系
- UML中关联关系和依赖关系的区别
- IP欺骗原理精解和防范技术
- 长期发短信会降低智商 甚至比吸大麻还严重