【C/C++多线程编程之四】终止pthread线程
多線程編程之終止pthread線程
? ? ??Pthread是 POSIX threads 的簡(jiǎn)稱,是POSIX的線程標(biāo)準(zhǔn)。
? ? ? ? ? 終止線程似乎是多線程編程的最后一步,但絕不是本系列教材的結(jié)束。線程創(chuàng)建到線程終止,希望先給讀者一個(gè)關(guān)于多線程編程的整體認(rèn)識(shí)。
? ? ? ? ??1.終止Pthread線程:pthread_exit()
? ? ? ? ? 參數(shù):
? ? ? ? ? ret:地址指針,本質(zhì)上是返回值寫(xiě)入的地址。
? ? ? ? ? 終止線程是線程的主動(dòng)行為,一個(gè)線程調(diào)用pthread_exit,終止線程自身。線程終止會(huì)釋放線程特定數(shù)據(jù),線程特定數(shù)據(jù)為線程專(zhuān)有。由于線程共享全局?jǐn)?shù)據(jù),故線程退出不會(huì)釋放進(jìn)程的全局?jǐn)?shù)據(jù)。
? ? ? ? ?該函數(shù)返回值ret如何使用?返回值是調(diào)用的概念,那么只有在一個(gè)線程被另一個(gè)線程“調(diào)用”時(shí)返回值ret才起作用。這里“調(diào)用”不同于一般意義上的函數(shù)調(diào)用,一個(gè)線程等待一個(gè)線程可以理解為“調(diào)用”。如一個(gè)線程調(diào)用pthread_join等待另一個(gè)線程終止。下面介紹等待線程終止函數(shù)pthread_join。
? ? ? ? ?2.等待線程終止:pthread_join()
? ? ? ? ?該返回值ret通過(guò)另一個(gè)函數(shù)pthread_join傳遞。等待線程終止pthread_join原型為:
等待線程終止pthread_join會(huì)阻塞調(diào)用線程,直到其指定的線程終止。pthread_join通過(guò)第一個(gè)參數(shù):線程ID來(lái)指定線程。調(diào)用者調(diào)用pthread_jion等待一個(gè)特定線程終止,在這種情況下,調(diào)用者可能需要這個(gè)特定線程的返回值,pthread_join通過(guò)將value_ptr的地址賦值給特定線程的pthread_exit的ret獲取返回值。
? ? ? ? ?3.pthread_exi與pthread_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,用于存儲(chǔ)線程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 !");? //終止時(shí)返回"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調(diào)用pthread_join等待子線程My_thread線程終止,通過(guò)傳遞My_thread_ret地址獲取子線程My_thread的返回值,最后在屏幕上輸出獲得的返回值。
?
來(lái)自 <https://blog.csdn.net/lovecodeless/article/details/23956975>
總結(jié)
以上是生活随笔為你收集整理的【C/C++多线程编程之四】终止pthread线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C/C++多线程编程之三】创建pthr
- 下一篇: 【C/C++多线程编程之五】pthrea