I am reading the MCTS Self-Paced Training Kit (Exam 70-536): Microsoft .NET Framework—Application Development Foundation, Second Edition eBook.
Now I am finishing off the threading chapter (nr. 7). In the questions at the end of lesson 2, the is one question (nr. 2) that asks: "You are writing a method that can be run by multiple threads. Make sure that no thread writes to the file while any thread is reading from the file. But you have to do it as efficiently as possible with regard to multiple threads reading at the same time."
Then there are two answers which are candidates for answers: A.
lock(file)
{
// Read
}
and
D.
ReaderWriterLock rwl = new ReaderWriterLock();
rwl.AcquireReaderLock(10000);
// Read
rwl.ReleaseReaderLock();
The subtle hint in the question that "it has to be efficient for multiple reads" of course means they want you to use the ReaderWriterLock
, but then I thought: "Creating a new instance of the ReaderWriterLock
inside the method you are locking shouldn't work, every call to the method will lock a different instance of ReaderWriterLock
."
However in the answers it says: D.
So IMHO this is an error in the book. They probably meant in the code sample that the new instance would be created somewhere else. If I would get this question on the exam, I would have gotten it wrong (I would choose A).