#include "apue.h"
#include <limits.h>
#include <pthread.h>
void* fun(void *arg)
{
printf("%lu: I'm alive\n", pthread_self());
pthread_exit(0);
}
int main(int argc, char **v)
{
pthread_t tid;
pthread_create(&tid, NULL, fun, NULL);
printf("%lu: I'm dead\n", pthread_self());
return 0;
}
$ ./a.out
3075692224: I'm dead
3075689280: I'm alive
3075689280: I'm alive
$ ./a.out
3076470464: I'm dead
有时,它会打印一行。
我认为
一行:3076470464:我死了
或者
两行:
3075692224: I'm dead
3075689280: I'm alive
应该是正确的。
因为我不使用pthread_join
但是为什么它可以打印三行;
最佳答案
您观察了对共享资源的无保护并发访问的奥秘,在这种情况下是缓冲的 stdout
。
使用互斥锁保护 stdout
免受并发访问,一切都会按预期工作:一个 printf()
语句将匹配一个打印行。
但是,您的程序存在 main() 在线程结束之前退出的风险,因此结束程序可能会在随机位置销毁线程。
关于c - Pthread I/O 缓冲区 : Why doese it print a redundant line?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22240523/