[英]Safe access to file from two processes
假設我有兩個進程。 一個總是駐留在內存中,並定期從磁盤上的文件中讀取一些設置。 如果它檢測到設置已更改,則會應用它們。
另一個進程在命令行下按需運行並修改設置。 因此,第一個進程只讀取文件而從不寫入文件,而第二個進程只能寫入文件。
我是否應該同步對文件的訪問以確保第一個進程始終獲得一致的設置,即在修改之前或之后不是某些中間內容? 如果是,那么在C ++中執行此操作的最簡單方法是什么。
我主要對跨平台方式感興趣。 但也對Windows和/或Linux特定的那些感到好奇。
使用命名信號量並在編輯磁盤上的文件之前要求任一進程保存信號量。 任何正在運行的應用程序都可以連接命名信號量。
查看man 7 sem_overview
以獲取有關linux機器上命名信號量的更多信息。
我能找到的最接近Windows的等價物是http://msdn.microsoft.com/en-us/library/windows/desktop/ms682438(v=vs.85).aspx
最明顯的解決方案是以獨占模式打開文件。 如果無法打開文件,請等待一段時間再嘗試打開該文件。 這將防止可能的訪問/修改沖突。
這種方法的好處是它很簡單,沒有明顯的缺點。
當然你可以使用一些同步原語(Mutex,信號量取決於操作系統),但這在你的場景中是一種矯枉過正,當不需要快速響應時(在打開嘗試之間等待200毫秒就可以了,並且編寫配置文件贏了'采取更多)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.