C - sleep () в темах дает проблемы - PullRequest
0 голосов
/ 10 января 2020
Функция

sleep () создает проблему в программе. Я объявил только один мьютекс, одну условную переменную и одну глобальную переменную:

pthread_mutex_t mutex;
pthread_cond_t something1;
int protected = 1;

После их инициализации и создания 2 потоков внутри главного с помощью pthread_create, я пишу это:

void *Thread(void *arg)
{
        while(1){
                pthread_mutex_lock(&mutex);

                while(protected == 0){
                        pthread_cond_wait(&something1, &mutex);
                }
                printf("aaa");

                sleep(2);

                pthread_mutex_unlock(&mutex);
        }
        pthread_exit(NULL);

}

void *Thread2(void *arg){
        while(1){
                pthread_mutex_lock(&mutex);

                while(protected == 1){
                        pthread_cond_wait(&something1, &mutex);
                }

                pthread_mutex_unlock(&mutex);
        }
        pthread_exit(NULL);

}

Это должно просто напечатать "aaa" в l oop навсегда, и это сработает, если я удалю sleep(2). Если я его оставлю, программа запустится, останется в живых, но ничего не печатает. Есть идеи, почему это происходит?

1 Ответ

3 голосов
/ 10 января 2020

printf является буферизованной строкой, что означает, что он не будет буферизировать sh буфер до экрана, пока не достигнет новой строки "\n" или когда буфер заполнится. Когда вы не спите, буфер быстро заполняется и печатается на экране, когда он заполняется, но когда вы спите, заполнение буфера занимает много времени, поэтому вы ничего не видите на экране. Попробуйте изменить это значение на printf("aaa\n"); или добавить fflush(stdout); после printf. См. Дополнительную информацию здесь: Почему printf не вызывает гриппа sh после вызова, если в строке формата нет новой строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...