的POSIX specification for fcntl()
狀態:當該文件的文件描述符是由處理或過程保持該文件描述符終止關閉POSIX系統清除沒有乾淨解鎖的文件鎖定的順序是什麼?
對於給定的處理的文件相關聯的所有鎖應去除。
解鎖由終止的進程原子每個文件保存的文件段鎖定的操作是什麼?換句話說,如果一個進程已經鎖定了一個文件的字節段B1..B2和B3..B4,但是在終止之前沒有解鎖這些段,當系統解鎖它們時,是段B1..B2和B3。 .B4同時解鎖之前另一個fcntl()
操作鎖定一段文件可以成功嗎?如果不是原子每文件,系統解鎖這些文件段的順序是否取決於最初獲取文件段的順序?
fcntl()
的規範沒有說明,但在POSIX規範中可能有一個通用規定,要求在操作之後確定性地清理操作,以便在不正常地退出或崩潰的進程之後進行清理。
出於好奇,你爲什麼在意? (創建一個取決於鎖釋放順序的情況需要一些努力...或者我想。) – Nemo
@Nemo:我解壓 - 至少我認爲我做了 - SQLite的文件鎖定算法,以便我可以實現文件鎖定 - 基於事務的文件內容交易。這些算法通過三段鎖實現,有時其中兩個同時鎖定。我的版本和SQLite的一個區別是,我等待文件鎖定,而他們選擇重試一定次數,在嘗試之間休眠。在我看來,他們不會阻止鎖,因爲他們想要與Win98兼容,但我試圖確定是否有其他原因。 –