執行緒特定資料函式的使用

2021-06-12 05:03:28 字數 876 閱讀 2441

《apue》 12.6節

執行緒特定資料(或執行緒私有資料,tsd)  的學習

建議參考《unix網路程式設計卷1》的第26.5節來看,它講得更加詳細。

練習**如下:

#include "apue.h"

#include static pthread_key_t r_key;

static pthread_once_t r_once = pthread_once_init;

void free_buf(void * buf)

void key_init(void)

void * operation(void * thread_num)

printf("the specific data of thread %d is %d\n",num, *((int *)pthread_getspecific(r_key)));

if(num == 1234)

else

if(pthread_getspecific(r_key) != null)

else

pthread_exit(null);

return((void *)0);

}int main()

err = pthread_create(&tid2,null,operation,(void *)5678);

if(err != 0)

sleep(20);//等待執行緒列印結果

return 0;

}

可以看到在thread 1234執行了pthread_key_delete()之後,不僅切斷了thread 1234與其執行緒特定資料之間的聯絡,而且也切斷了thread 5678與其執行緒特定資料之間的聯絡。

執行緒特定資料

執行緒特定資料也稱執行緒私有資料,是儲存和查詢某個特定執行緒相關資料的一種機制。在分配執行緒特定資料之前,需要建立與該資料相關聯的鍵,以用於獲取對執行緒特定資料的訪問。使用函式 pthread key create 可建立乙個鍵,而對所有的執行緒,都可以通過 pthread key delete 來...

Linux執行緒 執行緒特定資料

在單執行緒程式中。我們常常要用到 全域性變數 以實現多個函式間共享資料,然而在多執行緒環境下。因為資料空間是共享的。因此全域性變數也為全部執行緒所共同擁有。但有時應用程式設計中有必要提供執行緒私有的全域性變數,僅在某個執行緒中有效,但卻能夠跨多個函式訪問。posix執行緒庫通過維護一定的資料結構來解...

執行緒特定資料(學習)

1 首先,為什麼要使用執行緒特定資料呢?什麼是執行緒特定資料。這牽涉到重入函式和不可重入函式。重入函式就是在多個程序或者執行緒中,可以同時進行執行的函式,可重入函式就是不可以同時執行的函式,這個主要是可能多個程序或執行緒共享了乙個變數,這個變數只有乙個,這樣同時執行的時候,就會出問題了,因為我們不知...