2013-03-22 147 views
0

我正在用C語言在Windows上編寫一個(非常小的)webserver。 我需要獨佔鎖文件在讀取和寫入文件,我已閱讀關於鎖等msdn文檔,我發現功能LockFileExOVERLAPPED結構和Event hEvent,我也讀到他們如何工作,但問題是: - 在一個web服務器中,我們有很多文件,當一個線程鎖定例如文件「test.txt」(排他鎖)時,因爲有這個文件的請求,我如何同步另一個想要獲得的線程鎖定在同一個文件上?windows c webserver上的獨佔鎖文件

謝謝。

+1

使用鎖定將您的請求同步到文件,而不是鎖定文件 – xjdrew 2013-03-22 15:50:27

回答

0

看看互斥對象的用法。他們應該爲你解決這個問題。

需要訪問鎖定文件的線程可以爲其請求鎖定並進行排隊。當前線程完成後,它釋放它的鎖,並且下一個請求線程被授予鎖。

+0

好吧,但這樣我需要一個線程想要打開的每個文件的互斥鎖?如果是,那麼我需要將所有互斥量存儲在內存中?對? – user2199646 2013-03-22 16:13:36

+0

嗯......你應該不需要鎖定,除非該文件是可寫的,或者在服務器正在讀取它以便交付給客戶端時進行修改。否則,沒有理由要求在只讀文件上鎖定。這就是說,不,這取決於應用程序。您可以爲每個目錄,每個服務或任何其他優化使用互斥鎖,但這是由設計和應用程序驅動的。 – 2013-03-22 16:21:33

+0

是的,問題在於具體需要對每個文件進行讀/寫的獨佔訪問。 – user2199646 2013-03-22 16:39:32