0
對於我的項目,我正在從多個線程讀取和寫入文件,所以我需要實現文件鎖定。我試過fcntl()
,但是它似乎只能在進程之間鎖定,而不是在線程之間鎖定。因此,我正在尋找另一種解決方案。我提出的解決方案(可能不是最好的)是在我的文件中的每個記錄中都有一個字節來指示記錄是否被鎖定,然後我可以使用繁忙循環來讀取和檢查字節。如何高效地實現使用宏中央調度的文件區域鎖定?
所以,我有兩個問題。首先,實現文件區域鎖定的最有效方法是什麼?其次,如果我採用繁忙循環方法,那麼如何通過大中央調度來優化?我在想,我可以讓所有的忙碌循環發生在發送到dispatch_sync()
的塊中。但我不知道這是否能夠有效地發揮作用。
謝謝。
問題是,那麼我必須爲每個區域分配內存。一旦它成爲一個大文件,那就是很多內存(因爲文件中的每個記錄都需要分配內存)。我可以使用記錄ID映射信號。但是,我需要一個單一的信號量來鎖定該映射,或者實現一個會導致瓶頸的原子鏈表。 – Maz
mmap可能會解決大文件問題。或者你可能想要像libsqlite3這樣的數據庫庫。它爲大文件提供線程安全訪問。 –