`
hankgong
  • 浏览: 199534 次
  • 性别: 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
分享到:
评论

相关推荐

    嵌入式\新——pthread_join_exit_演示.ppt

    使用 `pthread_join` 可以确保主线程或另一个线程在目标线程完成其任务后再继续执行,这在需要依赖线程结果或者清理资源的情况下非常有用。当 `pthread_join` 调用返回时,意味着被等待的线程已经终止,资源已被...

    pthreads_pthread_

    这个例子中,两个线程都会尝试获取互斥锁并执行临界区代码,但由于互斥锁的存在,保证了同一时间只有一个线程在执行。 总结,pthreads-w32库为Windows环境下的C语言多线程编程提供了便利,使得开发者能够充分利用...

    pthread_self获取当前调用线程的识别码

    总结来说,`pthread_self` 是一个多线程编程中的重要工具,它提供了一种方式来标识和区分系统中的不同线程,使得我们能够有效地管理和协调多个并发执行的线程。理解和正确使用 `pthread_self` 对于编写高效、可靠的...

    Pthread创建一个线程

    本篇将详细介绍如何使用Pthread库在C语言环境中创建一个线程。 首先,我们需要了解线程的基本概念。线程是操作系统分配处理器时间的基本单位,一个进程可以包含一个或多个线程,每个线程都有自己的程序计数器、...

    pthread经典用法

    在多线程编程中,pthread库是一个不可或缺的工具,尤其在Unix-like系统中,它的存在极大地促进了并发程序的开发。本文将深入探讨pthread的基本用法,包括线程创建、线程返回值处理、以及互斥锁(Mutex)的使用,帮助...

    pthreads使用例子

    - 线程通过`pthread_exit()`退出,并可返回一个状态码,供join时使用。 6. **线程取消**: - `pthread_cancel()`可以取消正在运行的线程,但需谨慎使用,因为它可能导致资源泄露。线程应定期检查`pthread_...

    pthreadexample_linux线程_

    9. `pthread_join.c`:`pthread_join()`函数的使用示例,它允许一个线程等待另一个线程结束,这样可以确保线程执行顺序或回收子线程的资源。 10. `pthread_exit_test.c`:这个文件可能展示了如何使用`pthread_exit...

    undefined reference to ‘pthread_create’的解决方法

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

    c++pthread 线程封装

    例如,当两个线程试图同时修改同一个变量时,可以使用互斥锁来确保同一时间只有一个线程能访问该变量: ```cpp pthread_mutex_t mutex; void* thread_function(void* arg) { pthread_mutex_lock(&mutex); // 对...

    Pthread互斥问题

    在Pthreads中,我们使用`pthread_mutex_t`类型来表示互斥锁,并通过`pthread_mutex_init()`初始化,`pthread_mutex_lock()`获取锁,`pthread_mutex_unlock()`释放锁。 以下是一个简单的示例,展示了如何在Pthreads...

    linux线程四个常用函数源码例子

    `pthread_join()` 函数用于等待一个线程的结束。它接收两个参数,一个是待结束线程的ID,另一个是可选的返回值指针,用于获取线程的退出状态。例如: ```c void* exit_status; pthread_join(new_thread, &exit_...

    LinuxPthread实例详解及学习文档

    本资料详尽地介绍了Pthread在Linux环境下的使用,包括各种实例、API详细解释和技术总结,旨在帮助开发者深入理解和熟练应用Pthread进行并发编程。 首先,我们要理解线程的基本概念。线程是进程内的执行单元,与传统...

    3_threads_write_file.rar_linux综合_threads_线程综合例子

    在这个例子中,`3_threads_write_file.c`源代码会演示如何使用`pthread_create()`来创建线程,`pthread_join()`来等待线程结束,以及如何定义线程函数以执行特定任务。 线程创建: 在`pthread_create()`函数中,你...

    linux下多线程编程

    pthread_join 函数用来等待一个线程的结束,extern int pthread_join __P ((pthread_t __th, void __thread_return)); 它的原型为:第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来...

    Step by StepLinux C多线程编程入门(基本API及多线程.pdf

    线程的结束通常由`pthread_exit`函数完成,它允许线程返回一个状态值,这个值可以通过`pthread_join`获取。`pthread_exit`的参数就是线程的退出状态: ```c pthread_exit((void *) 0); // 0通常表示成功退出 ``` ...

    pthread API的一些用法

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

    Linux下线程的创建[借鉴].pdf

    首先,要创建一个新的线程,可以使用`pthread_create()`函数。这个函数的原型如下: ```c #include &lt;pthread.h&gt; int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), ...

    posix线程函数实例

    在这个例子中,我们定义了一个简单的线程函数`thread_function`,并通过`pthread_create`创建了一个新线程。主线程通过调用`pthread_join`等待新线程的结束。 ##### 1.2 线程属性设置函数 线程属性包括调度策略、...

    Linux 下多线程编程的详细例子

    本教程通过一个详细的例子,将深入讲解Linux下如何进行多线程编程。 首先,理解多线程的概念至关重要。在Linux中,线程是操作系统调度的基本单位,它们共享同一地址空间,这意味着线程间的通信非常高效,但同时也...

Global site tag (gtag.js) - Google Analytics