我在C#中創建windows應用程序,我想在多個文件中寫入多個線程。我從不同端口獲取數據,並且每個端口都有一個文件關聯。是否有可能爲每個端口創建線程並一次又一次地使用相同的線程來寫入數據到相應的文件? 假設我從端口10000,10001,10002獲取數據,並且有三個文件,分別爲10000.txt,10001.txt和10002.txt。我必須創建三個線程分別將數據寫入這三個文件,並且我想一次又一次地使用這些線程。是否有可能?如果可能,請給出一小段代碼示例?如何使用多個線程寫入單個文件?
回答
正如評論中所述,這是在尋求麻煩。
所以,你需要有一個線程安全類作家:
public class FileWriter
{
private ReaderWriterLockSlim lock_ = new ReaderWriterLockSlim();
public void WriteData(/*....whatever */)
{
lock_.EnterWriteLock();
try
{
// write your data here
}
finally
{
lock_.ExitWriteLock();
}
}
} // eo class FileWriter
本品適用於由多個線程調用。但是,有一個警告。可能會有鎖爭用。我使用了一個ReadWriterLockSlim
類,因爲您可能想要讀取鎖以及地獄,該類也允許您從讀取狀態升級。
您需要序列化線程並管理關閉和打開文件調用。可能使用append而不是寫入。您可以使用線程管理器類(更像主線程)來幫助同步所有其他線程。 雖然最好的東西可能是使用一個專用於寫入該文件的線程。
感謝您的迴應,但我可以創建一個專用線程爲一個特定的文件和另一個線程爲另一個文件等? – Dany
@Dany - 除非你有一個始終運行的線程,否則你的文件將被寫入同一個線程。即使是接受的答案也不會產生一個新的線程來寫入文件,只是防止多個線程同時寫入同一個文件。 –
您對其他帖子的回答與您的原始問題有些不符 - 您似乎想要爲每個帖子寫入一個不同的文件。
簡單的答案是..只要做到 - 文件系統是線程安全的。唯一的障礙可能是隻有一個磁盤的性能。同時並迅速地將很多小塊數據寫入多個文件可能會導致大量磁盤抖動,因爲文件系統試圖僅使用一個轉子臂來處理分佈式文件/目錄。具有大型緩存和智能控制器的現代硬盤可以在一定程度上緩解這種情況,但是您可能會遇到問題。試試看看!
如果您打算持續創建和銷燬線程,打開和關閉每個傳入網絡讀取的數據文件,則會增加您的問題。如果你可以避免這種情況,那就這樣做。
如果磁盤無法跟上,您可以實施自己的一些巧妙的「延遲寫入」算法,以增加磁盤寫入的大小,從而減少數量,或購買SSD或兩者。
- 1. 使用多個線程寫入單個文件
- 2. 多個文件寫入線程
- 3. 從ruby中的多個線程寫入單個文件
- 4. 如何使用多線程在python中一次更新/寫入多個文件?
- 5. 如何使用C#中的多線程下載單個文件
- 6. 如何使用python將多個輸入寫入文本文件?
- 7. 嘗試使用Python對單個命令寫入多個文件
- 8. 同時寫入JAVA中的多個線程的單個文件,按行同步
- 9. 如何一次寫入多個表單到一個文件
- 10. 多線程寫入文本文件
- 11. 從多個線程寫入文本文件?
- 12. 如何從兩個程序同時寫入單個xml文件?
- 13. 如何將多個單元格寫入文本文件
- 14. Java/Scala多線程文件寫入
- 15. 線程安全多文件寫入
- 16. Perl打開多個文件並並排寫入單個文件
- 17. java多線程(newCachedThreadPool),然後將結果寫入一個文件?
- 18. 多個線程可以同時將數據寫入文件嗎?
- 19. 從多個線程寫入不同文件後獲取ferror()
- 20. 寫入多個NCDF4文件
- 21. 如何使用導入從文件寫入另一個文件?
- 22. 如何使用for循環寫入多個文件?
- 23. 從多個線程寫入TraceListener
- 24. 如何使用DMA在一個線程中同時寫入不同磁盤上的多個文件?
- 25. 如何在有多個線程時減少文件寫入次數?
- 26. AVAssetWriter:如何多次寫入單個文件
- 27. 如何使用QThreads寫入多個QTcpSockets?
- 28. 如何使用單個文件資源安裝多個文件
- 29. 使用多線程下載單個文件
- 30. 在java中使用多線程在文件中寫入值
您需要序列化文件訪問(例如通過Mutex或類似的方法),或者讓一箇中心線程負責編寫文件,每個其他線程只是告訴要寫什麼(排隊要由該中心線程完成的工作)... – Yahia
爲什麼你需要從多個線程寫入單個文件?這不是一個好主意,不僅僅來自同步,甚至寫入文件的機制(鎖等)。 – Oded
在這裏,我從不同的端口連續獲取數據,並且有不同的文件。三個是與單個端口關聯的文件。我想將來自端口的數據寫入各個文件。我想爲每個傳入數據創建線程,它會將該數據寫入特定文件並中止它等等。 – Dany