我要創建兩個線程,這都應該是這樣的:關於並行POSIX線程
P1:
while(1) {
printf("1");
printf("2");
printf("3");
printf("4");
}
return NULL;
P2:
while(1) {
printf("5");
printf("6");
printf("7");
printf("8");
}
return NULL;
據我平行的知識它將不會打印12345678,而是由於缺乏同步而導致數字完全隨機變化。
然而,當我試圖複製它在真正的代碼它使印刷1234了幾下,然後切換到5678,打印了幾次,並回到1234
是我線程的理解錯誤,或我的代碼不等於問題?
void *print1(void *arg) {
while(1) {
printf("1");
printf("2");
printf("3");
printf("4\n");
}
return NULL;
}
void *print2(void *arg) {
while(1){
printf("5");
printf("6");
printf("7");
printf("8\n");
}
return NULL;
}
int main() {
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, print1, NULL);
pthread_create(&tid2, NULL, print2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
一個詞:buffering。輸出流不會隱式刷新,直到遇到新行。 – Kninnug
我該怎麼做? fflush(標準輸出)?我相當新的 – Pulz
你絕對可以嘗試。雖然它可能仍然會產生相同的輸出。請參閱答案以獲得更多解釋。 – Kninnug