2014-10-19 34 views
0

;我試圖使用pthread.h庫來查找數組中的最小數。我無法獲得編譯的代碼,並且不熟悉如何正確使用指針來使其工作。在C++中使用pthread來查找數組的最大值

#include <iostream> 
#include <pthread.h> 
using namespace std; 

int *min; 
int *max; 
double *average; 
int n; 

void* minimum(void* a){ 
    int size = n; 
    int* array = (int*) a; 
    int tempmin = array[0]; 
    for(int i=0; i<size; i++){ 
    if(array[i] < tempmin){ 
     tempmin = array[i]; 
    } 
    } 
    return NULL; 
} 

int main(){ 

int in; 

cout << "How many numbers would you like to enter?" << endl; 
cin >> n; 
int numbers[n]; 
    for(int i=0; i<n; i++){ 
     cout << "enter number " << i+1 << endl; 
     cin >> in; 
     numbers[i] = in; 
    } 

pthread_t thread1; 
int iret1 

pthread_create(&thread1, NULL, &minimum, (void*)numbers); 
} 
+1

爲什麼你需要一個線程?您可以在O(n)時間內找到在陣列上迭代的最小數字。 – fhsilva 2014-10-19 23:00:02

+0

這裏有什麼具體問題? – Ian 2014-10-19 23:03:08

+0

我想了解thread.h,並且想要爲數組的最小值,最大值和平均值創建3個單獨的線程 – Brad 2014-10-19 23:09:14

回答

2

我假設這只是一個練習,因爲有更好的方法來實現你想要的。請閱讀this link。所以這裏有幾點需要注意:

1 - 在pthread_create之後,您應該調用pthread_join等待它完成並釋放它的資源(您也可以創建一個分離的線程)。您還需要數組傳遞給線程作爲參數:

pthread_create(&thread1, NULL, &minimum, (void*)numbers); 
pthread_join(thread1, NULL); 

2 - 線程函數接收一個void *,所以你需要將它轉換爲任何的說法真的是:

void* minimum(void* a){ 
    int size = n; 
    int* array = (int*) a; 
    int tempmin = array[0]; 
    for(int i=0; i<size; i++){ 
    if(array[i] < tempmin){ 
     tempmin = array[i]; 
    } 
    } 
    return NULL; 
} 
+0

是的,我只是想讓自己熟悉pthread.h。你的建議擺脫了我在最小函數中的錯誤,但是現在當我去編譯時,我得到了「未定義的對pthread_create」的引用。我上面更新了我的代碼。 – Brad 2014-10-20 02:05:57

+0

您需要鏈接到pthread:add -lpthread鏈接器。 – fhsilva 2014-10-20 02:11:07

+0

謝謝你,這很好。思考一個更快的問題。是否有可能從void函數內部爲全局變量賦值? – Brad 2014-10-20 02:23:06