我要创建两个线程,这都应该是这样的:关于并行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