#include #include #include #include #include #define THREADS 9 int cmp(const void * first, const void *second){ return (*(int*)first) - (*(int*)second); } void* threaded(){ int delay = rand() % 6; int value = rand() % 256; int *ret = malloc(sizeof(int)); *ret = value; sleep(delay); return ret; } int main(void) { srand(time(NULL)); pthread_t threads[THREADS]; int returned[THREADS]; for (int i = 0; i < THREADS; ++i) { pthread_create(threads+i, NULL, threaded, NULL); } int *ret= NULL; for (int i = 0; i < THREADS; ++i) { pthread_join(threads[i], (void*)&ret); returned[i] = *ret; } qsort((void* ) returned, THREADS, sizeof(int), cmp); for (int i = 0; i < THREADS; ++i) { printf("%d\n", returned[i]); } return 0; }