由於您具有類Unix的特性,操作系統將在其他線程打開文件的同時刪除文件:目錄條目立即被刪除,文件本身(inode)在最後關閉時被刪除。
我能看到的唯一問題是在目錄掃描和文件打開之間:競爭條件可能會使文件被刪除。
恕我直言,你只是必須考慮到一個錯誤文件不存在是正常的,只需轉到下一個文件。
您描述的內容並不是很差,因爲它與MH文件夾中的郵件類似,即使涉及鎖定,也可以通過許多不同的進程訪問它。但根據消息的負載和大小,可以考慮使用數據庫。經驗法則(我意見):
- 幾個併發訪問和大文件:繼續使用文件系統
- 許多訪問和小文件(幾個KO最大):使用數據庫
當然,創建新消息時必須使用受互斥體保護的例程來查找下一個數字(應該將歸功於@ merlin2011用於注意問題)。
你在評論中說你的規格不允許數據庫。與郵件處理的比喻,你可以ALSE使用一個單獨的文件(如traditionnal郵件格式):
- 一個單一的文件
- 每個消息前面有一個固定大小的頭說,無論是主動或刪除
- 讀訪問不需要同步
- 寫訪問必須同步
這將是一個窮人的數據庫,所有SYN chronization手動完成,但每個線程只有一個文件描述符並保存所有打開和關閉操作。它有意義的地方有很多讀取和很少的寫入或刪除
一個可能的改進是(仍然像郵件閱讀器一樣)建立一個索引與每個消息的偏移量和狀態。索引可能在磁盤上或內存中,具體取決於您的要求。
嚴重的是,使用數據庫,而不是文件系統。另外,你的描述還沒有使我確信你還應該使用多線程。 – o11c
我知道一個數據庫是更簡單,但它是不允許在我的規格... – horcrux
程序員最重要的責任是告訴人們比你爲什麼規範是錯誤的dumber。 – o11c