线程发生了一些错误
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*)'
我不知道怎么解决...
首先,您希望线程执行的函数 运行 只能接受一个参数。如果您想向它传递不同的值,则必须使用一个结构(在您的情况下使用 data
和 len
)。
其次,您不必这样做:&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);
}
...
}
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*)'
我不知道怎么解决...
首先,您希望线程执行的函数 运行 只能接受一个参数。如果您想向它传递不同的值,则必须使用一个结构(在您的情况下使用 data
和 len
)。
其次,您不必这样做:&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);
}
...
}