POSIX的pthread_join
2011-09-16 20:04
204 查看
join
join是三种同步线程的方式之一。另外两种分别是互斥锁(mutex)和条件变量(condition variable)。调用pthread_join()将阻塞自己,一直到要等待加入的线程运行结束。
可以用pthread_join()获取线程的返回值。
一个线程对应一个pthread_join()调用,对同一个线程进行多次pthread_join()调用是逻辑错误。
join or detach
线程分两种:一种可以join,另一种不可以。该属性在创建线程的时候指定。joinable线程可在创建后,用pthread_detach()显式地分离。但分离后不可以再合并。该操作不可逆。
为了确保移植性,在创建线程时,最好显式指定其join或detach属性。似乎不是所有POSIX实现都是用joinable作默认。
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #define NUM_THREADS 4 void *BusyWork(void *t) { double result=0.0; long tid = (long)t; printf("Thread %ld starting...\n",tid); for (int i=0; i<1000000; i++) { result = result + sin(i) * tan(i); } printf("Thread %ld done. Result = %e\n",tid, result); pthread_exit((void*) t); } int main (int argc, char *argv[]) { pthread_t thread[NUM_THREADS]; pthread_attr_t attr; // 1/4: init pthread_attr_init(&attr); // 2/4: explicitly specify as joinable or detached pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); int rc; long t; for(t=0; t<NUM_THREADS; t++) { printf("Main: creating thread %ld\n", t); // 3/4: use thread attribute rc = pthread_create(&thread[t], &attr, BusyWork, (void *)t); if (rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } // 4/4: release thread attribute pthread_attr_destroy(&attr); void *status; for(t=0; t<NUM_THREADS; t++) { rc = pthread_join(thread[t], &status); if (rc) { printf("ERROR; return code from pthread_join() is %d\n", rc); exit(-1); } printf("Main: completed join with thread %ld having a status of %ld\n",t,(long)status); } printf("Main: program completed. Exiting.\n"); return 0; }
相关文章推荐
- POSIX的pthread_join
- POSIX的pthread_join
- POSIX多线程编程(二)--pthread_join
- POSIX pthread_join pthread_detach小验证
- POSIX的pthread_join http://blog.csdn.net/ba_jie/article/details/6783205
- POSIX的pthread_join
- POSIX thread(pthread) (三)
- Windows和Linux上分别怎样实现等待某个线程结束?---用WaitForSingleObject和pthread_join
- pthread_join()和pthread_detach()代码分析
- pthread_join等待的个数,即停止4个线程便释放一块空间,所以pthread_join时需加锁,之后便需对线程句柄置空
- 对线程等待函数pthread_join的理解1
- Pthread创建线程后必须使用join或detach释放线程资源
- pthread_join与pthread_detach细节问题
- pthread_join()和pthread_detach()
- linux posix 通过pthread_join获取线程pthread_exit返回的数据
- 线程相关函数(1)-pthread_create(), pthread_join(), pthread_exit(), pthread_cancel() 创建取消线程
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- pthread_join函数及linux线程
- POSIX thread (pthread) libraries
- POSIX多线程中的pthread_cond_wait() 函数