所以我們假設我有以下代碼打開一個文件,逐行讀取內容,然後在其他地方使用每行功能,然後在完成倒帶文件時。多線程與文件
FILE *file = Open_File();
char line[max];
while (!EndofFile())
{
int length = GetLength(line);
if (length > 0)
{
DoStuffToLine(line)
}
}
rewind(file);
我想知道是否有一種方法來使用線程來添加併發。由於我只是閱讀文件而沒有寫入文件,所以我覺得我不必擔心競爭情況。但是我不確定如何處理while循環中的代碼,因爲如果一個線程在文件上循環,另一個線程同時在文件上循環,它們是否會導致對方跳過線條,使其他線程錯誤等?什麼是解決這個問題的好方法?
感謝您的幫助!在我的文件中,每行都是hashmap的關鍵字,所以當我調用「DoStuffToLine」時,我使用鍵來查找值。那麼這也會從線程中受益嗎?或者是從你提到的同一個I/O綁定的散列表中讀取? – user1782677
@ user1782677好吧,首先,將整個文件首先讀入內存,而不是試圖檢索它的部分內容。在擔心其他類型的優化之前執行此操作。 – CookieOfFortune
@ user1782677讀取散列映射將會受到內存I/O限制,所以不應該是從磁盤讀取時遇到的問題。但是,這可能還不能提供很多性能優勢,這取決於其他一百個細節。除非你的hashmap非常大,否則這可能沒有多大幫助。 – Telgin