Как координировать потоки в C - PullRequest
0 голосов
/ 18 ноября 2018

У меня небольшая проблема, и я не понимаю, почему мой код не работает.

Цель кода - использовать 3 разных потока для отображения последовательности: (ABC) *

На выходе отображается только один 'A' ...

sem_t mutex;
char turn = 'a';

void displayA()
{
    for(int i = 0; i < 100; i++)
    {
       sem_wait(&mutex);
       if (turn == 'a')
        {
            printf("A");
            turn = "b";
            printf("%c", turn);
        }
       sem_post(&mutex);
    }
    return NULL;
}



int main()
{

    sem_init(&mutex, 0, 1);
    pthread_t thread1_id;
    pthread_t thread2_id;
    pthread_t thread3_id;


    pthread_create(&thread1_id, NULL, displayA, NULL);
    pthread_create(&thread2_id, NULL, displayB, NULL);
    pthread_create(&thread3_id, NULL, displayC, NULL);

    pthread_join(thread1_id, NULL);
    pthread_join(thread2_id, NULL);
    pthread_join(thread3_id, NULL);

    //sem_destroy(&mutex);

    printf("\n END main\n");
    return 0;
}

Спасибо за любую помощь

...