我剛開始學習並行線程API和我下面教程here將參數傳遞爲void *是否合法?
然而,在pthread_create
一個示例程序,樣本程序創建一個長變量和傳遞其價值,類型強制轉換爲void*
。在線程入口函數中,它像一個long一樣對它進行解引用。
這合法嗎? 我知道如果我通過變量t
的地址,每個線程將作用於相同的變量,而不是它的副本。我們可以這樣做嗎,因爲它是void*
,編譯器不知道我們發送的是什麼類型?
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
所以你的問題是關於傳遞指針的有效性或傳遞指針的有效性作爲pthread_create()的第四個參數? – qrdl 2010-06-04 09:29:46
@qrdl:實際上它的兩個,但我更感興趣的是傳遞第四個參數給pthread_create,讓編譯器認爲你實際上是在發送一個地址。 – 2010-06-04 09:33:59