ネタ的なソートアルゴリズムとして知られるSleep Sort。Qiitaでも様々な言語で実装した記事が公開されています。ということでマルチスレッドの練習も兼ねて、C言語のPOSIX Threadライブラリを使って実装してみました。
sleepSort.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define N 10
void *sort(void *t){
int n = *(int *)t;
sleep(n);
printf("%d\n", n);
pthread_exit(NULL);
}
int main(void){
int arr[N] = {2,7,10,6,4,5,8,3,9,1};
pthread_t tid[N];
for(int i=0; i<N; i++){
if(pthread_create(&tid[i], NULL, sort, &arr[i])){
fprintf(stderr, "error: pthread_create\n");
exit(1);
}
}
for(int i=0; i<N; i++){
if(pthread_join(tid[i], NULL)){
fprintf(stderr, "error: pthread_join\n");
exit(1);
}
}
return 0;
}
以下のようにコンパイル、実行できます。
$ gcc -pthread -Wall sleepSort.c
$ ./a.out
1
2
3
4
5
6
7
8
9
10
10秒かかりますが無事にソートされました。