2013-03-10 70 views
1

我想創建2個線程,其中一個是最大值,另一個是給出在命令行中輸入的數字列表的平均值。對一個基本的多線程程序進行編碼

#include <stdio.h> 
#include <pthread.h> 
#include <stdlib.h> 
#include <limits.h> 

void * thread1(int length, int array[]) 
{ 

int ii = 0; 
int smallest_value = INT_MAX; 
     for (; ii < length; ++ii) 
     { 
       if (array[ii] < smallest_value) 
       { 
         smallest_value = array[ii]; 
       } 
     } 
printf("smallest is: %d\n", smallest_value); 


} 

void * thread2() 
{ 

    printf("\n"); 

} 

int main() 
{ 
    int average; 
    int min; 
    int max; 

    int how_many; 
    int i; 
    int status; 
    pthread_t tid1,tid2; 

    printf("How many numbers?: "); 
    scanf("%d",&how_many); 
    int ar[how_many]; 
    printf("Enter the list of numbers: "); 
    for (i=0;i<how_many;i++){ 
    scanf("%d",&ar[i]); 
    } 

//for(i=0;i<how_many;i++) 
//printf("%d\n",ar[i]); 

     pthread_create(&tid1,NULL,thread1(how_many,ar),NULL); 
     pthread_create(&tid2,NULL,thread2,NULL); 
     pthread_join(tid1,NULL); 
     pthread_join(tid2,NULL); 
     return 0; 
    exit(0); 
} 

我只是做了第一個線程,這是打印出最小。編號,但編譯時出現以下錯誤:

How many numbers?: 3 
Enter the list of numbers: 1 
2 
3 
Smallest: 1 
Segmentation fault 

我該如何繼續修復seg。故障?

+2

'array'是一個'int'。您可能的意思是用'int * array'而不是'int array'聲明函數。 – 2013-03-10 20:55:22

+1

@WilliamPursell我現在下降到'.c:58:錯誤:預期的表達式之前int .c:58:錯誤:函數太少的參數thread1 ' – PhoonOne 2013-03-10 21:00:00

+1

void * thread1()似乎返回一個值.. – Bharat 2013-03-10 21:02:50

回答

0

你不能像在pthread_create中那樣傳遞參數。

創建如下的結構:

struct args_t 
{ 
    int length; 
    int * array; 
}; 

然後初始化與您的陣列和長度的結構。

args_t *a = (args_t*)malloc(sizeof(args_t)); 
//initialize the array directly from your inputs 

然後做

pthread_create(&tid1,NULL,thread1,(void*)a); 

然後只投的說法回到一個args_t。

希望有所幫助。