我遇到了pthread_create
函数的奇怪行为。代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
void *foo( void* a) {
printf("Doing something");
pthread_exit(NULL);
}
int main() {
printf("Main created");
pthread_t thread;
pthread_create( &thread, NULL, foo, NULL );
while(1); // This causes trouble
pthread_join( thread, NULL );
return 0;
}
出于某种原因,在while
到位的情况下,在经过很长时间的延迟后,会显示来自线程的消息。我希望在pthread_create调用之后,新线程完全独立于main,因此不应该受到其代码的影响。
答案 0 :(得分:3)
这与线程无关。
您会发现同样的行为发生在:
printf("Doing something");
while(1) ;
这是因为您在打印的字符串末尾没有包含换行符,这会导致行被缓冲。由于没有产生进一步的输出,该线可能被缓冲很长时间(甚至可能永远)。
为避免这种情况,您可以:
为所有输出行添加换行符,例如printf("Doing something\n");
在fflush(stdout)
之后致电printf()
以强制刷新该行
事先调用setvbuf(stdout, NULL, _IONBF, 0)
以禁用所有输出缓冲