这是MCTS Self-Paced Training Kit(考试70-536)中的错误吗?

Mat*_*els 5 .net c#

我正在阅读MCTS Self-Paced Training Kit(考试70-536):Microsoft .NET Framework-应用程序开发基础,第二版电子书.

现在我完成了线程章节(第7节).在第2课结束时的问题中,有一个问题(第2条)询问:"您正在编写一个可以由多个线程运行的方法.确保在任何线程正在读取时没有线程写入该文件从文件开始.但是你必须尽可能有效地完成多线程读取."

然后有两个答案是答案的答案:A.

lock(file)
{
   // Read
}
Run Code Online (Sandbox Code Playgroud)

D.

ReaderWriterLock rwl = new ReaderWriterLock();
rwl.AcquireReaderLock(10000);
   // Read
rwl.ReleaseReaderLock();
Run Code Online (Sandbox Code Playgroud)

问题中的微妙提示"它必须对多次读取有效"当然意味着他们希望你使用它ReaderWriterLock,但后来我想:"创建一个ReaderWriterLock你要锁定的方法内部的新实例应该不起作用,每次调用该方法都会锁定一个不同的实例ReaderWriterLock."

然而在答案中它说:D.

所以恕我直言,这是书中的一个错误.它们可能在代码示例中意味着新实例将在其他地方创建.如果我在考试中得到这个问题,我会错的(我会选择A).

Fre*_*örk 5

你的观察是正确的,因为ReaderWriterLock它确实是在方法体内创建的.为了使锁定按预期工作,所有线程都需要使用相同的ReaderWriterLock实例.

如果您的问题中的代码示例是答案的完整代码列表,我会说它以相当糟糕的方式呈现,并且它可能很好地导致人们选择错误的答案,因为他们对给定的进行了相当彻底的分析代码示例.