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

时间:2010-10-21 11:18:10

标签: c# .net

我正在阅读MCTS Self-Paced Training Kit(考试70-536):Microsoft .NET Framework-Application Development Foundation,Second Edition eBook。

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

然后有两个答案是答案的候选人: 甲

lock(file)
{
   // Read
}

d

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

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

然而在答案中它说:D。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

该套件历来着名充满错误,errata here。如果有帮助,第一版不是1,不是2,不是3,而是4 erratas。你发现它很好,但你应该在这里非常谨慎,并且确实试图验证你不是100%肯定的任何东西。