当前位置:编程学习 > C/C++ >>

pthread_exit pthread_join

void pthread_exit(void * rval_ptr)
线程退出函数    其他线程可以通过 pthread_jion 得到这个 无类型指针 rval_ptr

int pthread_join (pthread_t tid, void **rval_ptr)
等待线程 tid 终止,调用线程将阻塞,直到 线程 tid 调用 pthrad_exit, 返回,或者被取消。 rval_ptr就是调用 exit 的参数,如果对返回值不感兴趣, 可以传递NULL

一下程序在 开启的第奇数个线程的时候,会sleep 相应的秒数,运行时,主线程由于调用 pthread_join 阻塞,可以看到标准输出会卡。


 1 #include <pthread.h>
 2 #include <unistd.h>
 3 #include <stdio.h>
 4 struct args{
 5   char name[10];
 6   int exit_code;
 7 };
 8
 9 void * thread_run(void *arg){
10   struct args* a = (struct args*)arg;
11   printf("%s run, id:%u ", a->name, (unsigned int)(pthread_self())); // use arg to get the params;
12   if(a->exit_code % 2){
13     sleep(a->exit_code); // make the thread sleep some second;
14     printf("im thread %d, here sleep %d second! ", a->exit_code, a->exit_code);
15   }
16   pthread_exit((void*)(&(a->exit_code)));
17 }
18
19 int main(){
20   pthread_t tid[10];  //thread_ids
21   struct args a[10];  //thread_functions args
22   void *ec;           //exit code
23   int i;
24   for(i = 0; i < 10; ++i){
25     a[i].name[0] = ;
26     sprintf(a[i].name, "thread_%d", i);
27     a[i].exit_code = i;
28     if(pthread_create(&tid[i], NULL, thread_run, (void *)(&a[i]))){ //call pthread_create to create a thread use arg[i]
29       printf("error");
30       return 0;
31     }
32   }
33   for(i = 0; i < 10; ++i){
34     pthread_join(tid[i], &ec);//wait for thread tid[i] stop;
35     printf("%s exit code is:%d ", a[i].name, (*(int*)ec));
36   }
37   return 0;
38 }
39             

编译 :
g++ ./pthread_exit.cpp -lpthread -opthread_exit
结果:
thread_0 run, id:968255760
thread_2 run, id:951470352
thread_1 run, id:959863056
thread_3 run, id:943077648
thread_4 run, id:934684944
thread_5 run, id:926292240
thread_6 run, id:917899536
thread_7 run, id:909506832
thread_8 run, id:901114128
thread_9 run, id:892721424
thread_0 exit code is:0
im thread 1, here sleep 1 second!
thread_1 exit code is:1
thread_2 exit code is:2
im thread 3, here sleep 3 second!
thread_3 exit code is:3
thread_4 exit code is:4
im thread 5, here sleep 5 second!
thread_5 exit code is:5
thread_6 exit code is:6
im thread 7, here sleep 7 second!
thread_7 exit code is:7
thread_8 exit code is:8
im thread 9, here sleep 9 second!
thread_9 exit code is:9

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,