`
hankgong
  • 浏览: 196300 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用一个小例子来解释pthread_join

阅读更多

在学习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有什么用了。

0
1
分享到:
评论

相关推荐

    undefined reference to ‘pthread_create’的解决方法

    照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误: undefined reference to ‘pthread_create’undefined reference to ‘pthread_join’ 问题原因: pthread 库不是 Linux 系统默认的库,连接时需要...

    pthread API的一些用法

    主要是pthread API组成的一个简单的例子,更关键的是能够熟悉pthread_join,他能够一直阻塞整个进程直到他等待的那个线程结束才能继续执行他后面的代码。 编译使用gcc pthread.c -o pthread -pthread

    linux系统编程之线程.zip

    start_routine函数接收一个参数,是通过pthread_create的arg参数传递给它的,该参数的类型为void *,这个指针按什么类型解释由调用者自己定义。start_routine的返回值类型也是void *,这个指针的含义同样由调用者...

    thread-sanitizer.md

    # 利用Thread Sanitizer工具检查数据竞争的问题 ## 例子 #include &lt;pthread.h&gt; int Global; void *Thread1(void *x) { Global = 42; return x;... pthread_join(t, NULL); return Global; }

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

     一个web服务可以用多线程技术来处理请求:  int main()  {  struct soap soap1, soap2;  pthread_t tid;  ...  soap_init(&soap1);  if (soap_bind(&soap1, host, port, backlog) ) exit(1);  if (soap_...

    linux网络编程-宋敬彬-part2

    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中的...

    linux网络编程-宋敬彬-part3

    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中的...

    worker-threads:简单的老板和长寿的工人 pthread 示例

    老板/工人线程的简单示例在工作线程内执行一些“阻塞”功能的简单示例代码。 老板创建了许多不同类型的任务线程,这些线程将... 用法 它的用法与'create'/'join' 非常相似,没有每次需要工作时都必须创建新线程的开销。

    linux网络编程-宋敬彬-part1

    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中的...

    linux网路编程 中文 23M 版

    2.3.1 一个多文件的工程例子............................. ............. 34 2 . 3 . 2多文件工程的编译.............................................. 36 2.3.3 Makefile 的规则..................................

Global site tag (gtag.js) - Google Analytics