/* File: sleep-sort.c * * Purpose: Demonstrates probably one of the most efficient and powerful * parallel sorting algorithms known to humanity. * * Compile: gcc -g -Wall -pthread -o sleep-sort sleep-sort.c * Run: ./sleep-sort num-threads */ #include #include #include #include #include #include struct thread_params { unsigned int rank; unsigned int to_sort; }; void *worker_thread(void *arg) { struct thread_params *params = arg; sleep(params->to_sort); printf("Thread %d -> %d\n", params->rank, params->to_sort); return NULL; } int main(int argc, char *argv[]) { if (argc <= 1) { fprintf(stderr, "Usage: %s num-threads\n", argv[0]); return EXIT_FAILURE; } srand(time(NULL)); unsigned int num_threads = (unsigned int) strtol(argv[1], NULL, 10); printf("Generating unsorted list:\n"); pthread_t *threads = malloc(num_threads * sizeof(pthread_t)); for (int i = 0; i < num_threads; ++i) { struct thread_params *params = malloc(sizeof(struct thread_params)); int r = (random() % 10) + 1; printf("%d\n", r); params->rank = i; params->to_sort = r; pthread_create(&threads[i], NULL, worker_thread, params); } printf(" -- Sorting! -- \n"); for (int i = 0; i < num_threads; ++i) { pthread_join(threads[i], NULL); } return 0; }