【C/C++多线程编程之三】创建pthread线程
多線程編程之創建pthread線程
? ? ??Pthread是 POSIX threads 的簡稱,是POSIX的線程標準。
? ? ? ? ? 創建線程是多線程編程的第一步,理解線程創建時多線程編程的關鍵。
? ? ? ? ?1.創建Pthread線程:pthread_create()
? ? ? ? ? ?Pthread通過線程創建函數 pthread_create()來創建一個線程。其定義如下:
? ? ? ? ? ?參數:
? ? ? ? ? ?第一個參數:線程ID指針,本質上是線程ID的寫入地址;
? ? ? ? ? ?第二個參數:線程屬性參數;
? ? ? ? ? ?第三個參數:線程運行函數地址;
? ? ? ? ? ?第四個參數:運行時函數參數;
? ? ? ? ? ?今天我們創建缺省線程,不用第二和第四參數,這部分內容以后的章節會詳細講解。第一個參數是pthread_t類型指針,宏pthread_t原型是unsigned long int
?,用于存儲線程的ID。在系統中,每個線程都有唯一的線程ID,用于管理線程。第三個參數void * (*start_function)(void *)含義是指向返回值為void *,參數類型為void*的函數的指針,簡單講就是函數地址。
? ? ? ? ? ?2.pthread_create的理解:
- 返回值:pthread_create返回一個int類型值,線程創建成功時返回0;其他值都表示創建線程發生錯誤。容易誤解為返回線程ID。
- 第一個參數:pthread_t類型指針,實質上是將一個pthread_t變量的地址傳遞給函數,pthread_create函數將創建線程的ID寫入該pthread_t變量,便可通過該pthread_t獲得線程ID。
- 線程創建隨即運行:pthread_create函數創建線程成功后,該線程隨即運行。
? ? ? ? ???3.pthread_create牛刀小試:
?
#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);
}
???
return NULL;
}
int main()
{
pthread_create(&t1,NULL,My_thread,NULL);? //創建缺省線程
??? Sleep(1000000);? //主線程休眠,給新建的線程執行機會
???
return 0; //主線程不休眠,執行到return 0;程序結束,看不到線程輸出
}
?
? ? ? ? ? ? ? ? ??mian 函數運行時,系統會自動創建一個線程,稱為主線程。通過pthread_create創建的線程,稱為子線程。程序中通過Sleep函數休眠主線程,讓子線程運行打印信息,否則主線程return 0結束該進程,新建的子線程也隨即死亡,屏幕上將看不到子線程的輸出。
?
來自 <https://blog.csdn.net/lovecodeless/article/details/23786911>
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【C/C++多线程编程之三】创建pthread线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020十大新消费人群
- 下一篇: 【C/C++多线程编程之四】终止pthr