簡體   English   中英

將“線程號”傳遞給pthread_create

[英]Passing “thread number” to pthread_create

我正在創建一定數量的線程,並分派它們以執行我創建的函數( createAndInsertCandy )。 我想將一個整數傳遞給thread-create函數,以跟蹤在給定時間執行該函數的線程,以便可以在createAndInsertCandy打印該信息。

挑戰在於,我需要將參數傳遞給createAndInsertCandy作為對pthread_create函數的引用。 我不確定如何做到這一點,盡管考慮到我正在使用循環計數器來跟蹤我當前正在調度的線程號(通過引用將其傳遞不會這樣做)。 我可以想到幾個解決此問題的丑陋解決方案,但我敢肯定必須缺少一個更優雅的解決方案。 我很確定,除了pthread_create的最后一個參數需要作為參考之外,以下解決方案都可以使用。

       pthread_t factoryThreads[NUM_FACTORIES];
        for (int i = 0; i < NUM_FACTORIES; i++) {
            pthread_t factoryThread;
            factoryThreads[i] = factoryThread;
            pthread_create(&factoryThreads[i], NULL, createAndInsertCandy, i+1);
        }

快速而骯臟的解決方案是將整數轉換為指針

pthread_create(&factoryThreads[i], NULL, createAndInsertCandy, (void *)(i+1));

然后,將指針轉換回線程函數中的int

可行的解決方案是聲明一個int數組,您在創建線程時會對其進行初始化。

pthread_t factoryThreads[NUM_FACTORIES];
int args[NUM_FACTORIES];
for (int i = 0; i < NUM_FACTORIES; i++) {
    args[i] = i+1;
    pthread_create(&factoryThreads[i], NULL, createAndInsertCandy, &args[i]);
}

請注意,在所有線程檢索到它們的值之前, args數組必須保留在作用域內。 因此,例如,如果在main聲明了該數組,則main必須在該數組完成線程處理后才能退出。 或者,您可以使數組成為全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM