セマフォを使用してマージソートを実装しようとしていますが、コードの実行に問題があります。
sem_t *sem;
pthread_t *t;
void *parallel_merge_sort(void *thread_id)
{
int a = *((int *) thread_id);
printf("%d. in sort\n",a);
fflush(stdout);
sem_post(&(sem[a]));
if(a % 2)
sem_wait(&(sem[a-1]));
else
sem_wait(&(sem[a+1]));
printf("%d. out sort\n",a);
fflush(stdout);
}
void main()
{
int P = 2,i;
t = calloc(P,sizeof(pthread_t));
sem = calloc(P,sizeof(sem_t));
printf("threads created\n");
fflush(stdout);
for(i=0;i<P;i++)
pthread_create(&(t[i]),NULL,(void*) ¶llel_merge_sort,(void *) &i);
for(i=0;i<P;i++)
pthread_join(t[i], NULL);
printf("threads end\n");
fflush(stdout);
}
このコードは、次のような出力を生成します。
threads created
0. in sort
0. in sort
この後、実行して待機し続けることはありません。
何が問題で、どうすれば修正できますか?