创建的线程很慢

时间:2017-05-05 18:24:53

标签: c multithreading pthreads

我遇到了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,因此不应该受到其代码的影响。

1 个答案:

答案 0 :(得分:3)

这与线程无关。

您会发现同样的行为发生在:

printf("Doing something");
while(1) ;

这是因为您在打印的字符串末尾没有包含换行符,这会导致行被缓冲。由于没有产生进一步的输出,该线可能被缓冲很长时间(甚至可能永远)。

为避免这种情况,您可以:

  • 为所有输出行添加换行符,例如printf("Doing something\n");

  • fflush(stdout)之后致电printf()以强制刷新该行

  • 事先调用setvbuf(stdout, NULL, _IONBF, 0)以禁用所有输出缓冲