Функция
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)
. Если я его оставлю, программа запустится, останется в живых, но ничего не печатает. Есть идеи, почему это происходит?