fork 時緩衝區注意事項

2021-08-04 23:26:26 字數 908 閱讀 4736

fork()呼叫時,整個父程序空間會原模原樣複製到子程序中,包括指令、變數值、程式呼叫棧、環境變數和緩衝區等等。

#include

#include

#include

intmain()

return0;

}輸出結果:

a0a0

#include

#include

#include

intmain()

return0;

}輸出結果:

a0a0

程式遇到"\n"、eof、緩衝區滿、檔案描述符關閉、或者主動flush、或是程式退出就會把資料刷出緩衝區。

注意:標準輸出是行快取,所以遇到"\n"時會刷出緩衝區,但是對於磁碟這個塊裝置來說,"\n"並不會引起緩衝區刷出的動作,那是全緩衝,可以使用setvbuf設定緩衝區大小,或者用fflush刷快取。

#include

#include

#include

intmain()

return0;

}輸出結果:

a0a1a0a1a0a1a0a1

fork()之後,print列印a0放在快取區中,等i=1時在fork()快取區中的值被複製到兩個子程序中了,就多了兩次a0列印。

#include

#include

#include

intmain()

return0;

}雖然延時一秒,但是快取區不重新整理,所有的值是一起最後輸出的。

使用無鎖佇列(環形緩衝區)注意事項

環形緩衝區是生產者和消費者模型中常用的資料結構。生產者將資料放入陣列的尾端,而消費者從陣列的另一端移走資料,當達到陣列的尾部時,生產者繞回到陣列的頭部。如果只有乙個生產者和乙個消費者,那麼就可以做到免鎖訪問環形緩衝區 ring buffer 寫入索引只允許生產者訪問並修改,只要寫入者在更新索引之前將...

使用無鎖佇列(環形緩衝區)注意事項

環形緩衝區是生產者和消費者模型中常用的資料結構。生產者將資料放入陣列的尾端,而消費者從陣列的另一端移走資料,當達到陣列的尾部時,生產者繞回到陣列的頭部。如果只有乙個生產者和乙個消費者,那麼就可以做到免鎖訪問環形緩衝區 ring buffer 寫入索引只允許生產者訪問並修改,只要寫入者在更新索引之前將...

fork與輸出緩衝區

如下程式輸出的 的數目是多少 程式1 include include include int main return 0 輸出 8個 程式2 include include include int main return 0 輸出 6個 行緩衝 在這種情況下,當輸入或輸出緩衝區中遇到換行符時,標準i...