在学习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有什么用了。
分享到:
相关推荐
使用 `pthread_join` 可以确保主线程或另一个线程在目标线程完成其任务后再继续执行,这在需要依赖线程结果或者清理资源的情况下非常有用。当 `pthread_join` 调用返回时,意味着被等待的线程已经终止,资源已被...
这个例子中,两个线程都会尝试获取互斥锁并执行临界区代码,但由于互斥锁的存在,保证了同一时间只有一个线程在执行。 总结,pthreads-w32库为Windows环境下的C语言多线程编程提供了便利,使得开发者能够充分利用...
总结来说,`pthread_self` 是一个多线程编程中的重要工具,它提供了一种方式来标识和区分系统中的不同线程,使得我们能够有效地管理和协调多个并发执行的线程。理解和正确使用 `pthread_self` 对于编写高效、可靠的...
本篇将详细介绍如何使用Pthread库在C语言环境中创建一个线程。 首先,我们需要了解线程的基本概念。线程是操作系统分配处理器时间的基本单位,一个进程可以包含一个或多个线程,每个线程都有自己的程序计数器、...
在多线程编程中,pthread库是一个不可或缺的工具,尤其在Unix-like系统中,它的存在极大地促进了并发程序的开发。本文将深入探讨pthread的基本用法,包括线程创建、线程返回值处理、以及互斥锁(Mutex)的使用,帮助...
- 线程通过`pthread_exit()`退出,并可返回一个状态码,供join时使用。 6. **线程取消**: - `pthread_cancel()`可以取消正在运行的线程,但需谨慎使用,因为它可能导致资源泄露。线程应定期检查`pthread_...
9. `pthread_join.c`:`pthread_join()`函数的使用示例,它允许一个线程等待另一个线程结束,这样可以确保线程执行顺序或回收子线程的资源。 10. `pthread_exit_test.c`:这个文件可能展示了如何使用`pthread_exit...
照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误: undefined reference to ‘pthread_create’undefined reference to ‘pthread_join’ 问题原因: pthread 库不是 Linux 系统默认的库,连接时需要...
例如,当两个线程试图同时修改同一个变量时,可以使用互斥锁来确保同一时间只有一个线程能访问该变量: ```cpp pthread_mutex_t mutex; void* thread_function(void* arg) { pthread_mutex_lock(&mutex); // 对...
在Pthreads中,我们使用`pthread_mutex_t`类型来表示互斥锁,并通过`pthread_mutex_init()`初始化,`pthread_mutex_lock()`获取锁,`pthread_mutex_unlock()`释放锁。 以下是一个简单的示例,展示了如何在Pthreads...
`pthread_join()` 函数用于等待一个线程的结束。它接收两个参数,一个是待结束线程的ID,另一个是可选的返回值指针,用于获取线程的退出状态。例如: ```c void* exit_status; pthread_join(new_thread, &exit_...
本资料详尽地介绍了Pthread在Linux环境下的使用,包括各种实例、API详细解释和技术总结,旨在帮助开发者深入理解和熟练应用Pthread进行并发编程。 首先,我们要理解线程的基本概念。线程是进程内的执行单元,与传统...
在这个例子中,`3_threads_write_file.c`源代码会演示如何使用`pthread_create()`来创建线程,`pthread_join()`来等待线程结束,以及如何定义线程函数以执行特定任务。 线程创建: 在`pthread_create()`函数中,你...
pthread_join 函数用来等待一个线程的结束,extern int pthread_join __P ((pthread_t __th, void __thread_return)); 它的原型为:第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来...
线程的结束通常由`pthread_exit`函数完成,它允许线程返回一个状态值,这个值可以通过`pthread_join`获取。`pthread_exit`的参数就是线程的退出状态: ```c pthread_exit((void *) 0); // 0通常表示成功退出 ``` ...
主要是pthread API组成的一个简单的例子,更关键的是能够熟悉pthread_join,他能够一直阻塞整个进程直到他等待的那个线程结束才能继续执行他后面的代码。 编译使用gcc pthread.c -o pthread -pthread
首先,要创建一个新的线程,可以使用`pthread_create()`函数。这个函数的原型如下: ```c #include <pthread.h> int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), ...
在这个例子中,我们定义了一个简单的线程函数`thread_function`,并通过`pthread_create`创建了一个新线程。主线程通过调用`pthread_join`等待新线程的结束。 ##### 1.2 线程属性设置函数 线程属性包括调度策略、...
本教程通过一个详细的例子,将深入讲解Linux下如何进行多线程编程。 首先,理解多线程的概念至关重要。在Linux中,线程是操作系统调度的基本单位,它们共享同一地址空间,这意味着线程间的通信非常高效,但同时也...