1

创建线程时,它会自动启动参数中的线程函数吗?

我正在使用

iret1 =  pthread_create(&client[i++].tID, NULL, thread_function, NULL);
printf("Thread Created");   //for testing purposes

在我的线程函数中,我在最顶部有一个打印语句。前任:

void *thread_function(void *arg){
    printf("Entered thread function");
    ...
    }

而不是打印Entered thread function它立即打印Thread Created

在我开始另一个线程之前它不会打印Entered thread function,这是有原因的吗?

4

1 回答 1

1

您至少需要在每个printf(3)\n格式函数的末尾添加一个换行符,并且经常调用fflush(3) ,例如在两个之后添加一个调用...fflush(NULL);printf

不要忘记<stdio.h>函数是缓冲的。请参见setvbuf(3)函数和手册页。

您的输出未按您希望的方式打印的原因是它停留在stdout.

而且您可能无法保证输出。个别字符可能是混合的。阅读unlocked_stdio(3)flockfile(3)了解详情。

您可能想(多次)阅读一些pthread 教程...

PS您可以考虑直接使用write(2)系统调用(不使用任何<stdio.h>函数)。

于 2013-04-05T17:59:56.757 回答