2012-12-07 61 views
1

fopen/fwrite和多線程?fopen/fwrite和多線程?

一些多線程程序打開同一個文件,每個線程創建一個指向該文件的文件指針。

有一個paricular程序,將更新的一些隨機時刻的文件,而其他線程,通過不同的程序創建的,只會讀取文件中的內容創建一個線程。

我想這裏面創建一個賽車/數據不一致的問題,如果在文件中寫線程變更內容,而其他線程試圖讀取其中的內容。

這裏的問題是,更新文件中的線程應該編譯成比創建一個讀取文件的內容,所以內部程序級的線程控制變得不可能線程程序不同的EXE程序。

我的解決辦法是在硬盤創建一個非常小的「標誌」文件指示文件的3種狀態:

1)寫線程正在更新文件的內容;

2)讀線程正在讀取文件的內容;

3)1)或2);

使用此標誌文件在必要時阻止線程。

是否有一些更緊湊/整潔的解決方案來解決這個問題?

+0

你建議什麼是一個信號量,它是一個很好的解決方案:-) 你可以鎖定文件或者你可以把你的信號量作爲文件的第一個字節......不管是多線程。 –

+0

有文件鎖。你提出的主要併發問題是在進程之間,而不是線程。你在哪個操作系統上? – UmNyobe

+0

你能解釋一下關於文件鎖嗎?以及如何使用它們,謝謝 – 60080

回答

0

使用所有進程都知道的進程全局「名爲」信號量可能會更容易。加上然後你可以使用線程/進程阻塞信號機制,而不是旋轉文件打開關閉和文件內容...