2011-04-13 52 views
2

我有一個生產者進程,它寫入一個mmap'd文件和一個從中讀取的消費者進程。這是在Linux上。從另一個進程讀取未刷新頁面

如果生產者對mmap進行更改並且不立即刷新,當消費者訪問它時會發生什麼?它會從磁盤獲得舊版本,還是足夠聰明以獲得未刷新的頁面?

回答

2

mmap() manual page

MAP_SHARED

分享該映射與此映射對象的所有其它過程。 存儲到該區域相當於寫入文件的 。文件可能不會 實際更新,直到msync(2)或 munmap(2)被調用。

底線:如果在調用mmap()時指定了更改,其他進程將立即看到更改。根據您的文檔可以使用MAP_SHAREDMAP_PRIVATE,它控制與其他進程映射相同文件區域的行爲。

+0

因此,雖然進程之間的更改立即傳播,但磁盤可能實際上並未收到更改,直到稍後或調用「msync」時。 – CMCDragonkai 2017-11-08 13:29:35