Я думаю, что мой код не будет печатать текстВыполняет ли system() вызов типа sem_post внутри?
ну почему сюда! \ П
но это делает.
Есть что-то не так? С system()
? Потому что, когда я удалил его, код работал так, как я хотел, останавливаясь.
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
pthread_t id0, id1;
sem_t sp;
void *fun0(void *) {
// When erasing the following line "system("");",
// it block up, and doesn't print "oh why come here!\n".
// But with it, it print the text!
system("");
return NULL;
}
void *fun1(void *) {
sem_wait(&sp);
fprintf(stderr, "oh why come here!\n");
return NULL;
}
int main() {
sem_init(&sp, 0, 0);
pthread_create(&id0, 0, fun0, NULL);
pthread_create(&id1, 0, fun1, NULL);
void *stat0, *stat1;
pthread_join(id0, &stat0);
pthread_join(id1, &stat1);
return 0;
}
Компилятор: GCC 4.1.2 Linux ядра: 2.6.18
Я собирал его с GCC 4.6.3, ядро 3.2.0, он побежал, как я хочу также. Так что я думаю, что это из-за gcc 4.1.2 или ядра 2.6.18.
Как это может быть правильный ответ? Если sem_wait заблокирован, то следующий printf не может произойти. Случается, что поток, выполняющий систему(), запускает сигнал (вероятно, SIGCHILD?), Который прерывает sem_wait. Проверьте возвращаемое значение sem_wait, вы будете исправлены (если я прав, это -EINTR). – xryl669
Вы перемещаете эти инструкции printf(), вы увидите, почему. –