我正在阅读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).
你的观察是正确的,因为ReaderWriterLock它确实是在方法体内创建的.为了使锁定按预期工作,所有线程都需要使用相同的ReaderWriterLock实例.
如果您的问题中的代码示例是答案的完整代码列表,我会说它以相当糟糕的方式呈现,并且它可能很好地导致人们选择错误的答案,因为他们对给定的进行了相当彻底的分析代码示例.
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |