使用pthread_create()函数创建一个新线程,在该线程中对数组进行排序需要将数组作为参数传递给子线程,因此需要使用(void*)类型将数组强制转换为void*类型。
使用了pthread_join()函数等待线程结束,并检查是否成功。
最后,释放动态分配的数组,结束程序。
在main函数中,首先使用srand()函数设置随机数生成器的种子,以保证每次运行时生成的随机数序列不同。
动态分配一个大小为NUM的整型数组array,用于保存生成的随机数。
使用for循环生成NUM个随机数,将其保存到数组array中。
创建一个新线程th,并调用pthread_create()函数来执行sort函数。sort函数将被作为线程的入口点,对数组array进行排序。
使用pthread_join()函数等待线程th结束。这样可以确保在主线程继续执行之前,子线程已经完成了排序任务。
使用for循环遍历数组array,打印出排序后的结果。
最后,释放动态分配的数组内存,返回0以表示程序正常结束。[C] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM 10000000
int cmp(const void* a, const void* b){
return *(int*)a - *(int*)b;
}
void* sort(void* arg){
int* array = (int*)arg;
qsort(array, NUM, sizeof(int), cmp);
return NULL;
}
int main(){
srand((unsigned int)time(NULL));
int* array = (int*)malloc(sizeof(int) * NUM);
for (int i = 0; i < NUM; i++){
array[i] = rand();
}
pthread_t th;
pthread_create(&th, NULL, sort, (void*)array);
pthread_join(th, NULL);
for (int i = 0; i < NUM; i++){
printf("%d\n", array[i]);
}
free(array);
return 0;
} |