[英]Passing multiple arguments to a thread in C (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.