我有以下代码:
for(i=1; i<=2; i++)
{
fork();
printf("x ");
}
Run Code Online (Sandbox Code Playgroud)
我计算出x应打印6次:第一次迭代两次,第二次迭代4次.
相反,X被打印8次.为什么?
因为缓冲.通常,stdout是行缓冲的,所以
printf("x ");
Run Code Online (Sandbox Code Playgroud)
不会立即写入"x "终端而是写入输出缓冲区.这是在进程fork()s 时复制的,所以第二次迭代后的四个进程中的每一个"x "在输出缓冲区中有两个[一个来自父级/在第一次迭代中分叉,一个来自第二次迭代]当它退出时,八个xs是完全印刷.
printf("x ");在打印后立即冲洗缓冲液,仅打印六个.