0

セマフォを使用してマージソートを実装しようとしていますが、コードの実行に問題があります。

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*) &parallel_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

この後、実行して待機し続けることはありません。

何が問題で、どうすれば修正できますか?

4

1 に答える 1