2

好的,在多线程系统中有两种方法可以将文本写入文件

哪一个比另一个好

第一种情况:有一个静态对象来锁定streamwriter并进行操作

第二种情况:

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

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

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

C# .net 4.5 - WPF 应用程序

4

1 回答 1

3

如果您使用第二个变体锁定是隐式和隐藏的。调用代码确实知道有关锁的任何信息。事实上,它可能错误地假设两个调用WriteLine是原子的,并且会一个接一个地出现在输出中。

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


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

这不会同步任何东西,因为每个WriteLine都是在一个新的、独立的同步编写器上分派的。您还需要正确处理对象,而不是Flush不必要地调用。

于 2014-08-13T12:18:04.187 回答