執行緒本地

Version >= C11

這是 C11 中引入的新儲存說明符以及多執行緒。這在早期的 C 標準中不可用。

表示執行緒儲存持續時間。使用 _Thread_local 儲存說明符宣告的變數表示該物件是該執行緒的本地物件,其生命週期是其建立的執行緒的整個執行。它也可以與 staticextern 一起出現。

#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);
    }
}