【C/C++多线程编程之四】终止pthread线程

多线程编程之终止pthread线程

      Pthread POSIX threads 的简称,是POSIX线程标准

          终止线程似乎是多线程编程的最后一步,但绝不是本系列教材的结束。线程创建到线程终止,希望先给读者一个关于多线程编程的整体认识。

          1.终止Pthread线程:pthread_exit()

          参数:

          ret:地址指针,本质上是返回值写入的地址。

          终止线程是线程的主动行为,一个线程调用pthread_exit,终止线程自身。线程终止会释放线程特定数据,线程特定数据为线程专有。由于线程共享全局数据,故线程退出不会释放进程的全局数据。

         该函数返回值ret如何使用?返回值是调用的概念,那么只有在一个线程被另一个线程“调用”时返回值ret才起作用。这里“调用”不同于一般意义上的函数调用,一个线程等待一个线程可以理解为“调用”。如一个线程调用pthread_join等待另一个线程终止。下面介绍等待线程终止函数pthread_join

         2.等待线程终止:pthread_join()

         该返回值ret通过另一个函数pthread_join传递。等待线程终止pthread_join原型为:

等待线程终止pthread_join会阻塞调用线程,直到其指定的线程终止。pthread_join通过第一个参数:线程ID来指定线程。调用者调用pthread_jion等待一个特定线程终止,在这种情况下,调用者可能需要这个特定线程的返回值,pthread_join通过将value_ptr的地址赋值给特定线程的pthread_exitret获取返回值。

         3.pthread_exipthread_join牛刀小试

 

#include "pthread.h"

#include "sched.h"

#include "semaphore.h"

#include "stdio.h"

#include "windows.h"

 

#pragma comment(lib, "pthreadVC2.lib")  //必须加上这句

 

pthread_t t1;                           //pthread_t变量t1,用于存储线程ID

 

void* My_thread(void* args)

{          

for(int i = 0; i < 100; i++)

{

printf("I am your thread ,  my ID is   %d\n",t1);

}

   

pthread_exit("I am over !");  //终止时返回"I am over !"

 

return NULL;

}

int main()

{

void* My_thread_ret;

   

pthread_create(&t1,NULL,My_thread,NULL);

 

pthread_join(t1,&My_thread_ret);

 

printf("\nmain主线程从My_thread子线程获取的返回值:%s",(char *)My_thread_ret);

   

Sleep(1000000);

   

return 0;

}          

                 上面的例子主线程main调用pthread_join等待子线程My_thread线程终止,通过传递My_thread_ret地址获取子线程My_thread的返回值,最后在屏幕上输出获得的返回值。

 

来自 <https://blog.csdn.net/lovecodeless/article/details/23956975>

猜你喜欢

转载自blog.csdn.net/zcc1229936385/article/details/81231037