Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is this an error in the MCTS Self-Paced Training Kit (Exam 70-536)?

Tags:

c#

.net

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).

like image 627
Matthijs Wessels Avatar asked Oct 21 '10 11:10

Matthijs Wessels


2 Answers

Your observation is correct, granted that the ReaderWriterLock is indeed created within the method body. For the locking to work as expected, all threads need to use the same ReaderWriterLock instance.

If the code sample in your question is the full code listing for the answer I would say that it is presented in a rather bad way, and it may very well lead people to select the wrong answer because they did a fairly thorough analysis of the given code samples.

like image 85
Fredrik Mörk Avatar answered Oct 21 '22 11:10

Fredrik Mörk


That kit is historically famously full of errors, with errata here. If it helps, the first edition had not 1, not 2, not 3 but 4 erratas. You did well to spot it, but you should be very cautious here, and indeed try to verify anything you are not 100% sure of.

like image 22
Marc Gravell Avatar answered Oct 21 '22 11:10

Marc Gravell