2012-04-29 42 views
0

我在寫一些利用libonion庫的東西,它是多線程的,只是想知道如何去檢測是否有任何聲明的文件指針正在被其他線程讀取讀取或不。檢測文件當前是否正在讀取

(基本上我想創造一個他們如果從他們沒有一個人的閱讀去掉了手工處理的臨時文件。)

+1

你可以只刪除臨時文件打開後,經過最後一道工序已經關閉他們,他們會自動從文件系統中刪除。 – hochl

+1

做什麼hochl說。沒有理由等待刪除臨時文件。 stdio'tmpfile'函數的一個很好的實現應該在文件甚至返回之前刪除它... –

回答

0

文件指針只是一個指向文件資源,以及是否有其他線程正在讀它不能通過只看指針來確定。您可能想要在文件指針旁邊聲明一個互斥鎖和一個全局鎖定計數。當任何線程想要讀取它時,它可以獲得互斥體上的共享鎖,從而增加鎖定計數並在線程無意進一步讀取文件時減少鎖定計數後釋放它。

可以查詢該鎖定計數,看看是否值是零,在這種情況下,你可以安全地釋放它。

另外請注意,這個鎖計數是全球性的,你可以在比賽條件下結束,讀取和更新鎖定計數變量應完全完成。

+0

POSIX爲此提供了一個'rwlock'原語。沒有意義重新發明輪子......另外,如果OP實際上使用'FILE *'而不是低級文件描述符訪問,那麼當多個線程同時讀取相同的'FILE'時,幾乎無法做任何有意義的事情,所以(單個)讀線程可以在其使用期間調用'flockfile',然後在完成時調用'funlockfile'。想要獲取臨時文件的線程可以使用'ftrylockfile'來測試該文件是否仍在使用中。但是,我認爲最好是在評論中這樣做,避免整個問題。 –

相關問題