2014-11-05 538 views
2

我有一個pthread指針,我需要爲指針分配足夠的空間來保存足夠數量的pthread。然後初始化它們和pthread_create()以將線程傳遞給一些函數。如何動態分配(初始化)一個pthread數組?

問題是,如果我只是使用malloc來爲指針分配空間,那麼只是使用pointer [index]的pthread_create,那麼線程將不會被正確創建。我該如何解決這個問題?我相信pthread_t是一些結構類型,所以我相信我需要在執行pthread之前初始化它們。我怎麼做?謝謝。

我只是他們工作正常了一定量的並行線程的測試:

pthread_t t1, t2, t3 ...... tn; 

然後

pthread_create(&t1, NULL, function, (void *)argument) 

但是,如果使用指針和malloc的,他們不會work.Thread不會被創建。

pthread_t *ptr; 

ptr = malloc(sizeof(pthread_t)*num); 

然後

pthread_create(&ptr[index], NULL, function, (void *)argument) 

將無法​​正常工作。在這種情況下,我如何初始化ptr [index]?

+0

'pthread_t'是一些未指定的類型。在我的Debian/Linux系統上,它是一個'long' ...而'malloc'可能會失敗。你測試過了嗎?最後,你應該清除'ptr'數組......但是'pthread_create'可能會失敗,你應該測試它。 – 2014-11-05 09:49:47

+0

你的malloc解決方案似乎是正確的。問題可能在其他地方。 – interjay 2014-11-05 09:51:02

+1

請修改您的問題以使用真實代碼進行改進。 – 2014-11-05 09:52:36

回答

3

是的,它應該工作。你的some space是什麼?

你沒有把完整的代碼,但只是一個建議,你初始化num

檢查下面的代碼。我相信它正在工作。

#include <stdio.h> 
#include <pthread.h> 
#include <stdlib.h> 
void* func(void* id) 
{ 
     int *c; 
     c = (int*)id; 
     if(c) 
       printf("%d\n", *c); 
} 

int main(int argc, char *argv[]) 
{ 
     int i = 0; 
     int *index = NULL; 
     int num; 
     pthread_t *ptr; 
     if (argv[1]) 
       num = atoi(argv[1]); 

     index = calloc (num, sizeof (int)); 
     for(i = 0; i < num; i++) 
     { 
       index[i] = i; 
     } 

     ptr = malloc(sizeof(pthread_t)*num); 
     for(i = 0; i < num; i++) 
     { 
       pthread_create(&ptr[i], NULL, func, (void*)&index[i]); 
     } 
     for(i = 0; i < num; i++) 
       pthread_join(ptr[i], NULL); 

     return 0; 
} 
1

爲你動態分配整型數組它是一樣的...

pthread_t *id_array; 

id_array = (pthread_t*)malloc(sizeof(pthread_t)*n); 

其中n =數組的大小...

它會爲你工作..

+0

他需要**初始化**不分配內存 – Danh 2016-11-20 06:13:11