【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_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,用于存儲線程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>
總結
以上是生活随笔為你收集整理的【C/C++多线程编程之四】终止pthread线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C/C++多线程编程之三】创建pthr
- 下一篇: 线下实战2.0