各位看官們,大家好,上一回中咱們說的是線程創建與結束的例子,這一回咱們說的例子是:線程標識符。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
我們在上一回中介紹如何創建線程時有一個線程標識符的問題沒有詳細介紹,今天再做一些說明。
我們可以使用命令:ps x來查看進程及其線程,不過命令運行結果中並沒有顯示線程的標識符(線程ID)。線程標識符只在創建它的進程內有效,因此,在大部分情況下沒有必要知道線程標識符。當然了,如果需要查看線程標識符時,我們可以借助系統函數來獲取線程標識符。
pthread_t pthread_self(void);
該函數用來獲取線程的標識符,類似獲取進程標識符的函數:getpid(); 該函數沒有參數,直接使用就可以; 函數運行成功時返回線程標識符,該函數不會運行失敗;
在Linux系統中,為了提高代碼的可移植性,通常使用無符號整型(unsigned int)來當作線程標識符的類型。我們可以打印出來標識符的值供大家查看。
pthread_t thread_id;
thread_id = pthread_self(); // 獲取線程標識符
printf("The ID of thread is :%u \n",(unsigned int)thread_id); //打印線程標識符
另外,我們也可以在創建線程時從pthread_create函數的參數中得到線程標識符。
res = pthread_create(&thread_value,NULL,thread_func,(void *)param);
if(0 != res)
{
printf("thread can't be created \n");
return 1;
}
printf("The ID of thread is :%u \n",(unsigned int)thread_value); //打印線程標識符
看官們,正文中就不寫代碼了,詳細的代碼放到了我的資源中,大家可以下載使用。
該代碼是在上一回代碼的基礎上修改來的,在代碼中主要添加了獲取和顯示線程標識符的代碼。另外,在編譯代碼的時候,需要使用l參數來導入鏈接庫,不然會有鏈接錯誤。例如:
gcc ThreadID.c -o s -lpthread //使用gcc編譯ThreadID.c文件,並且生成名為s的可執行文件
下面是程序的運行結果,請大家參考:
Create a thread
The process ID is 3477 //顯示創建線程的進程ID
The ID of thread is :3075689280 //創建線程的時候獲取線程ID,並且打印出來
this is the function,it is running normally .and the param is: Thread function param
The ID of thread is :3075689280 //線程運行時獲取線程ID,並且打印出來
The old status is 0
thread function running finished and the status is :3
從上面的運行結果中可以看到,我們在創建線程的時候獲取的線程ID與線程運行時獲取的線程ID完全一致。兩次獲取到的線程ID都是:3075689280。
各位看官,關於線程標識符的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。