#include #include #include #include #define BUF_SIZE 2048 int **matrix; int lines[100]; char filenames[2][10] = {"foo", "bar"}; int cmpfunc (const void * a, const void * b) { return ( *(int*)a - *(int*)b ); } int count_lines(FILE* file) { char buf[BUF_SIZE]; int counter = 0; for(;;) { size_t res = fread(buf, 1, BUF_SIZE, file); if (ferror(file)) return -1; int i; for(i = 0; i < res; i++) if (buf[i] == '\n') counter++; if (feof(file)) break; } return counter; } void *sort(void * vargs) { int num = (int) vargs; FILE * fin = fopen(filenames[num], "r"); lines[num] = count_lines(fin); fseek(fin,0L,SEEK_SET); matrix[num] = malloc(lines[num]*sizeof(int)); for (int i = 0; i < lines[num]; i++) fscanf(fin, "%d", &matrix[num][i]); fclose(fin); qsort(matrix[num], lines[num], sizeof(int), cmpfunc); return NULL; } int main(int argc, char ** argv) { pthread_t tids[2]; int tmp[1000], res[1000], cur_len; matrix = malloc(2*sizeof(int *)); pthread_create(&tids[0], NULL, sort, (void *)0); pthread_create(&tids[1], NULL, sort, (void *)1); for (int i = 0; i<2; i++) { pthread_join(tids[i], NULL); if (i == 0) { memcpy(res, matrix[i], sizeof(int)*lines[i]); cur_len = lines[i]; continue; } int a = 0, b = 0, j = 0; while (a matrix[i][b]) ? matrix[i][b++] : res[a++]; } while (a