使用TextWriter.多线程文件IO的同步或锁.c# WPF .net 4.5

本文关键字:WPF net 同步 多线程 TextWriter 文件 IO 使用 | 更新日期: 2023-09-27 18:17:43

在多线程系统中有两种向文件写入文本的方法

哪一个比另一个好

第一种情况:使用静态对象锁定流写入器并执行操作

第二种情况:

     TextWriter twWaitingToBeFetched;
     twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
     twWaitingToBeFetched.WriteLine(srNewComposedUrl);
     twWaitingToBeFetched.Flush();

现在你认为哪一个更好,为什么?

我需要多个线程任务来写相同的流

c# .net 4.5 - WPF应用程序

使用TextWriter.多线程文件IO的同步或锁.c# WPF .net 4.5

如果你使用第二个变量锁定是隐式的和隐藏的。调用代码并不知道锁的任何信息。事实上,它可能错误地认为对WriteLine的两个调用是原子的,并且将一个接一个地出现在输出中。

使用显式锁定,这样可以更好地控制哪些操作看起来是原子操作。


 TextWriter twWaitingToBeFetched;
 twWaitingToBeFetched = TextWriter.Synchronized(new StreamWriter(stringPath, true));
 twWaitingToBeFetched.WriteLine(srNewComposedUrl);
 twWaitingToBeFetched.Flush();

这不会同步任何东西,因为每个WriteLine都被分派到一个新的、独立的同步写入器上。您还需要适当地处置对象,而不是不必要地调用Flush