回答
裹文件IO爲lock statement:
private static object _syncRoot = new object();
然後:
lock(_syncRoot)
{
// do whatever you have to do with this file
}
相當有用,感謝和關注 –
即使它解決了我的目的..謝謝噸 –
我會建議在ReaderWriterLock類或ReaderWriterLockSlim類,這是快,但有一些陷阱讀書了,我相信它會滿足您的需求完美。
這是錯誤的;這裏的所有線程都是編寫者。讀取器/寫入器鎖只有在讀取數量大大超過寫入時纔會受益。在這種情況下,所有訪問都需要寫入(如此排除)。這只是***增加了開銷。香草鎖(監視器)將是更可取的。 –
我很難說這些方法中的任何一種都是「錯誤的」。是的,顯示器確實在只寫情況下提供了更好的性能,但在只會感覺到非常高的爭用情況的水平上。 – Gent
如果所有訪問都是「寫入」,那麼確定它仍然會*工作*,但它使用了錯誤的工具 –
最簡單的是簡單地確保您有一定的鎖定結構(互斥體,監控等),對訪問該文件,則每個線程都可以單獨訪問。這可以訪問相同的基礎Stream/TextWriter/etc,或者可以打開/關閉鎖定區域內的文件。
更復雜的方法是擁有專用的寫入器線程和同步的工作隊列。然後,所有線程都可以添加到隊列中,並且一個線程可以草稿並寫入文件。這意味着您的主線程僅在添加隊列(非常簡短)時才被阻止,而不是在IO(較慢)上阻塞。但是請注意,如果進程異常退出,隊列中的數據可能會丟失。
- 1. 在多線程環境
- 2. 在多線程環境中使用CList
- 3. Shiro在多線程環境中
- 4. 在多線程環境中使用Log4Net
- 5. 在.net中調試多線程環境
- 6. 在多線程環境中使用TraceSource
- 7. 在多線程環境中重繪
- 8. 在多線程環境中使用NLog
- 9. 實現多線程環境
- 10. 如何在多線程環境中使用JdbcTemplate?
- 11. HttpContext.Current如何在多線程環境中工作?
- 12. IShellItemImageFactory :: GetImage卡在多線程環境
- 13. Python不能在多線程環境
- 14. 例外,在多線程環境
- 15. 在多線程環境(嵌入式v8)
- 16. 多線程環境中的Ninject攔截
- 17. 多線程環境中的領域
- 18. scala:多線程環境中的apache httpclient
- 19. 多線程環境中的mkdirs()函數
- 20. 多線程環境中的JDBC事務
- 21. 在多線程環境下讀寫數組
- 22. 在C#多線程環境中使用遺留COM組件
- 23. 在多線程環境中只訂閱一次事件
- 24. 在多線程環境下在eclipse中進行遠程調試
- 25. 多線程和多處理器環境對線程有用嗎?
- 26. 如何解釋多線程環境下的讀/寫全局變量
- 27. flex/lex yacc/bison多線程環境
- 28. 多線程環境下的rocksdb
- 29. 如何在R中的多圖環境中繪製一條線?
- 30. CtrlEvents的處理程序在多線程環境中如何工作?
您沒有收到訪問衝突錯誤,那會很糟糕。你可能有一個UnauthorizedAccessException。只打開一次文件,並使用鎖定來防止輸出混合。 –