第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

fork()分支比預(yù)期更多?

fork()分支比預(yù)期更多?

C++ C
眼眸繁星 2019-11-25 13:52:09
考慮以下代碼:#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){    int i;    for(i = 0; i < 2; i++)    {        fork();        printf(".");    }    return 0;}該程序輸出8個點。那怎么可能呢?應(yīng)該不應(yīng)該有6個點?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗 獲得超5個贊

fork()原始常常延伸的想象力。在您對它有所了解之前,應(yīng)該在紙上找出每個操作的含義并說明處理的數(shù)量。不要忘記fork()創(chuàng)建了當(dāng)前進(jìn)程的近乎完美的副本。(對于大多數(shù)用途而言)最重要的區(qū)別是,fork()父級和子級的返回值不同。(由于此代碼忽略了返回值,因此沒有區(qū)別。)

因此,起初只有一個過程。這將創(chuàng)建第二個過程,這兩個過程都將打印點和循環(huán)。在第二次迭代中,每個進(jìn)程都會創(chuàng)建另一個副本,因此有四個進(jìn)程先打印一個點,然后退出。因此,我們可以輕松地說明六個點,就像您期望的那樣。

但是,printf()真正的作用是緩沖其輸出。因此,只有兩個進(jìn)程時的第一個點在寫入時不會出現(xiàn)。這些點保留在緩沖區(qū)中,該緩沖區(qū)在fork()中重復(fù)。直到該過程即將退出時,才會出現(xiàn)緩沖點。四個過程打印一個緩沖點,新的過程給出8個點。

如果您想避免這種情況,請fflush(stdout);在之后致電printf()。


查看完整回答
反對 回復(fù) 2019-11-25
?
繁星點點滴滴

TA貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊

您在輸出流中有未提交的緩沖區(qū)。stdout是行緩沖的,緩沖區(qū)與其余過程一起復(fù)制。程序終止時,未提交的緩沖區(qū)被寫入兩次(每個進(jìn)程一次)。兩者都使用


printf("a\n");


printf("a "); fflush(stdout);

不要表現(xiàn)出問題。


在第一個示例中,您創(chuàng)建了四個進(jìn)程,每個進(jìn)程的輸出流緩沖區(qū)中都有兩個點。當(dāng)每個流終止時,它將刷新其緩沖區(qū),生成八個點。


查看完整回答
反對 回復(fù) 2019-11-25
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗 獲得超2個贊

當(dāng)我= 0時


處理_1:緩沖的文本= 1點


Process_2(由Process_1創(chuàng)建):緩沖的文本= 1點


當(dāng)我= 1


Process_3(由Process_1創(chuàng)建):從Process_1繼承1個緩沖點,并單獨打印1個點。總共Process_3打印2個點。


Process_4(由Process_2創(chuàng)建):從Process_2繼承1個緩沖點,并自行打印1個點??偣睵rocess_4打印2個點。


Process_1:打印2個點(當(dāng)i = 0時一個緩沖點,而i = 1時另一個緩沖點)


Process_2:打印2點(i = 0時一個緩沖點,i = 1時另一緩沖點)


最終輸出:8點。:)


查看完整回答
反對 回復(fù) 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 582 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號