2011-04-29 57 views
0

我的程序的基本功能:創建計數器數(0),爲每個線程創建指令數,創建包含計數器*,重複和work_fn(增量,減量等)的結構指令。 程序將構建所有的動態結構(已經編碼) 然後產生線程並加入。一個線程可以有多個指令。C線程參數

static void* worker_thread(void *arg){ 
    long long *n; 
    pthread_mutex_lock(&lock1); 

    n = (long long *) arg; 
    printf("Testing: %lld.\n", n); 

    pthread_mutex_unlock(&lock1); 

    return NULL; 
} 

//nthreads is the total number of threads 

for(int i=0; i < nthreads ; i++){ 
    pthread_create(&thread_id[i], NULL, worker_thread, &i); //Problem 
} 


for(int i=0; i < nthreads ; i++){ 
    pthread_join(thread_id[i], NULL); 
} 

我想測試線程函數,首先創建線程數然後加入他們。 但我似乎無法將當前線程數[我]在我的情況下傳遞給工作線程函數。

回答

1
int n = (int)arg; 

在你的worker_thread函數中。

而且

(void*)i 

而不是&i在你的線程產卵

+0

由於某種原因,我得到的地址打印出來,而不是 – Jono 2011-04-29 12:51:57

+1

謝謝!但我得到了一個警告:轉換爲從主函數不同大小的整數指針 – Jono 2011-04-29 12:55:30

+0

我確實有很長的n =(long long)arg;和(void *)我tho = \ – Jono 2011-04-29 13:00:59

2

使用

(void *) i 
在在pthread_create

然後

int i = (int) arg 
+0

感謝了,但我得到了一個警告:從函數'main'中從gcc不同大小的整數轉換爲指針 – Jono 2011-04-29 12:54:18

+0

請檢查,sizeof(int) ==你的平臺上的sizeof(void *) – Igor 2011-04-29 13:03:49

+0

你的問題是你正在編譯64位。嘗試啓動'文件your_executable',它應該告訴你它是x86_64。 2解決方案:編譯代碼時使用'-m32',或將_int_轉換爲_long int_。 – Gui13 2011-04-29 13:08:19