在学习pthread的时候,pthread_join这个函数的理解恐怕让很多人迷惑,这里我们用一个例子来示范一下:
#include <iostream>
#include <pthread.h>
using namespace std;
#define TOTAL 10
int sumarray[TOTAL];
void *PartSum(void* param) {
int index = (int)param;
int sum = 0;
for(int i=1; i<=10; ++i){
sum += (index*10 + i);
}
sumarray[index] = sum;
pthread_exit(NULL);
}
int main()
{
//cout << "Hello World!" << endl;
int sumall=0;
pthread_t threads[TOTAL];
for(int i=0;i<TOTAL;i++){
pthread_create(&threads[i], NULL, PartSum, (void *)i);
}
//for(int i=0; i<TOTAL; i++){
// pthread_join(threads[i], NULL);
//}
for(int i=0;i<TOTAL;i++)
sumall += sumarray[i];
cout<<sumall<<endl;
return 0;
}
这个程序的运行结果是不确定的,原因就是因为在计算总和的时候分出来的子线程可能并没有结束。把注释的部分去掉注释之后,结果就是5050了,通过这个例子,应该就很明确pthread_join有什么用了。
分享到:
相关推荐
照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误: undefined reference to ‘pthread_create’undefined reference to ‘pthread_join’ 问题原因: pthread 库不是 Linux 系统默认的库,连接时需要...
主要是pthread API组成的一个简单的例子,更关键的是能够熟悉pthread_join,他能够一直阻塞整个进程直到他等待的那个线程结束才能继续执行他后面的代码。 编译使用gcc pthread.c -o pthread -pthread
start_routine函数接收一个参数,是通过pthread_create的arg参数传递给它的,该参数的类型为void *,这个指针按什么类型解释由调用者自己定义。start_routine的返回值类型也是void *,这个指针的含义同样由调用者...
# 利用Thread Sanitizer工具检查数据竞争的问题 ## 例子 #include <pthread.h> int Global; void *Thread1(void *x) { Global = 42; return x;... pthread_join(t, NULL); return Global; }
一个web服务可以用多线程技术来处理请求: int main() { struct soap soap1, soap2; pthread_t tid; ... soap_init(&soap1); if (soap_bind(&soap1, host, port, backlog) ) exit(1); if (soap_...
2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 搜索路径 43 2.3.6 自动推导规则 44 2.3.7 递归make 44 2.3.8 Makefile中的...
2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 搜索路径 43 2.3.6 自动推导规则 44 2.3.7 递归make 44 2.3.8 Makefile中的...
老板/工人线程的简单示例在工作线程内执行一些“阻塞”功能的简单示例代码。 老板创建了许多不同类型的任务线程,这些线程将... 用法 它的用法与'create'/'join' 非常相似,没有每次需要工作时都必须创建新线程的开销。
2.3.1 一个多文件的工程例子 34 2.3.2 多文件工程的编译 36 2.3.3 Makefile的规则 37 2.3.4 Makefile中使用变量 39 2.3.5 搜索路径 43 2.3.6 自动推导规则 44 2.3.7 递归make 44 2.3.8 Makefile中的...
2.3.1 一个多文件的工程例子............................. ............. 34 2 . 3 . 2多文件工程的编译.............................................. 36 2.3.3 Makefile 的规则..................................