我覺得我的代碼將無法打印文本system()在裏面做一個像sem_post這樣的調用嗎?
哦,爲什麼來這裏!\ n
,但它確實。
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或kernel 2.6.18。
這怎麼可能是正確答案?如果sem_wait被阻塞,那麼下面的printf不會發生。會發生什麼情況是,執行system()的線程會觸發一箇中斷sem_wait的信號(可能是SIGCHILD?)。檢查sem_wait的返回值,你會被修復(如果我是對的,它是-EINTR)。 – xryl669 2013-06-28 16:50:00
你移動這些printf()語句,你會明白爲什麼。 – 2013-06-28 17:07:40