我正在阅读MCTS自定进度培训工具包(考试70-536):Microsoft .NET Framework-Application Development Foundation,第二版电子书。

现在,我结束了线程章节(nr。7)。在第2课结束时的问题中,有一个问题(第2题)问:“您正在编写一种可以由多个线程运行的方法。请确保在读取任何线程时,没有线程写入文件。从文件中删除。但是对于同时读取多个线程,您必须尽可能高效地执行此操作。”

然后有两个答案可以作为答案的候选者:
一种。

lock(file)
{
   // Read
}



D.
ReaderWriterLock rwl = new ReaderWriterLock();
rwl.AcquireReaderLock(10000);
   // Read
rwl.ReleaseReaderLock();

问题中的微妙暗示“它必须多次读取必须有效”,这当然意味着他们希望您使用ReaderWriterLock,但随后我想到:“不应在要锁定的方法内创建ReaderWriterLock的新实例工作时,对该方法的每次调用都会锁定ReaderWriterLock的不同实例。”

但是,在答案中却说:D.

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

最佳答案

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

如果您问题中的代码示例是答案的完整代码 list ,那么我会说它以一种很糟糕的方式呈现,并且很可能会导致人们选择错误的答案,因为他们对给定的内容进行了相当全面的分析。代码样本。

关于c# - 这是MCTS自定进度培训工具包(考试70-536)中的错误吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3986840/

10-09 03:30