线程发生了一些错误

Some errors have occurred with Thread

void* bubbleSort(int *data,int len){
    int i = 0, j = 0, temp = 0;
    for ( int i = 0 ; i < len ; i++ ){
        for ( j = i + 1; j < len ; j++ ){
            if(data[i]>data[j]){
                temp = data[i];
                data[i] = data[j];
                data[j] = temp;
            }
        }
    }
}
int main(){
int *data =new int[1000000];
    int len = 0;
    int k = 0;
      while( file >> data[k]) {
      k++;
      len = len + 1;
   } // while 
    file.close();

int input = 0;
scanf("%d",&input );  // thread
pthread_t thread[input];
  for ( int i = 1 ; i < input ; i ++){
    pthread_create(&thread[i],NULL,&bubbleSort,(void*)data,len);    
   }   

  for ( int i = 0 ; i < len ; i++){
    cout << data[i]<< " ";
  }
}

我先用线程冒泡排序,搜了一些网站看它写的是什么。现在我有一些错误。

[Error] invalid conversion from 'void* ( * )(int*,int)( * )(void*)'

我不知道怎么解决...

首先,您希望线程执行的函数 运行 只能接受一个参数。如果您想向它传递不同的值,则必须使用一个结构(在您的情况下使用 datalen)。

其次,您不必这样做:&bubbleSort。您应该传递函数而不引用它:bubbleSort.

第三,你必须期望 bubbleSort 的参数是一个 void * 并将其转换为其中的其他内容。


typedef struct {
    int *data;
    int len;
} Args;

void* bubbleSort(void * param){
    Args * args = (Args *) param;
    int len = args->len;
    int * data = args->data;
    ...
}

int main(){
    Args * arguments; 
    // here you initialize your arguments with data and len
    ...

    for (int i = 1 ; i < input ; i ++){
        pthread_create(&thread[i], NULL, bubbleSort, arguments);   
    }   
    ...
}