執行緒本地
Version >= C11
這是 C11 中引入的新儲存說明符以及多執行緒。這在早期的 C 標準中不可用。
表示執行緒儲存持續時間。使用 _Thread_local
儲存說明符宣告的變數表示該物件是該執行緒的本地物件,其生命週期是其建立的執行緒的整個執行。它也可以與 static
或 extern
一起出現。
#include <threads.h>
#include <stdio.h>
#define SIZE 5
int thread_func(void *id)
{
/* thread local variable i. */
static _Thread_local int i;
/* Prints the ID passed from main() and the address of the i.
* Running this program will print different addresses for i, showing
* that they are all distinct objects. */
printf("From thread:[%d], Address of i (thread local): %p\n", *(int*)id, (void*)&i);
return 0;
}
int main(void)
{
thrd_t id[SIZE];
int arr[SIZE] = {1, 2, 3, 4, 5};
/* create 5 threads. */
for(int i = 0; i < SIZE; i++) {
thrd_create(&id[i], thread_func, &arr[i]);
}
/* wait for threads to complete. */
for(int i = 0; i < SIZE; i++) {
thrd_join(id[i], NULL);
}
}