假設我有兩個進程。一個總是駐留在內存中並定期從磁盤上的文件中讀取一些設置。如果它檢測到設置已更改,則會應用它們。從兩個進程安全地訪問文件
其他進程在命令行下按需運行並修改設置。因此,第一個進程只能讀取文件,而不能寫入文件,而第二個進程只能寫入文件。
我是否應該同步對文件的訪問以確保第一個進程始終得到一致的設置,即在修改之前或之後不是某些中間內容?如果是的話,在C++中最簡單的方法是什麼?
我很感興趣,主要是跨平臺的方式。但也對Windows和/或Linux特有的好奇。
假設我有兩個進程。一個總是駐留在內存中並定期從磁盤上的文件中讀取一些設置。如果它檢測到設置已更改,則會應用它們。從兩個進程安全地訪問文件
其他進程在命令行下按需運行並修改設置。因此,第一個進程只能讀取文件,而不能寫入文件,而第二個進程只能寫入文件。
我是否應該同步對文件的訪問以確保第一個進程始終得到一致的設置,即在修改之前或之後不是某些中間內容?如果是的話,在C++中最簡單的方法是什麼?
我很感興趣,主要是跨平臺的方式。但也對Windows和/或Linux特有的好奇。
使用一個已命名的信號量,並要求任一進程在編輯磁盤上的文件之前保存信號量。命名的信號可以通過任何正在運行的應用程序連接到。
查看man 7 sem_overview
瞭解有關linux機器上已命名信號量的更多信息。
窗戶我能找到的最接近的是http://msdn.microsoft.com/en-us/library/windows/desktop/ms682438(v=vs.85).aspx
最明顯的解決方案是以獨佔模式打開文件。如果文件無法打開,請稍等片刻,然後嘗試再次打開文件。這將防止可能的訪問/修改衝突。
這種方法的好處是它很簡單並且沒有明顯的缺點。
當然你可以使用一些同步原語(Mutex,Semaphore取決於操作系統),但是如果不需要快速響應(在開放嘗試之間等待200毫秒是正常的,寫入配置文件不會更多)。