Errata
The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".
The following errata were submitted by our customers and approved as valid errors by the author or editor.
Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update
Version | Location | Description | Submitted By | Date submitted | Date corrected |
---|---|---|---|---|---|
Printed | Page 7 Paragraph above Figure 1-3 |
After going to press, the Visual Studio team made a change to new project defaults. When you create a new EXE project, the default platform is x86 (not anycpu). This change was made for many reasons: support for edit & continue, support for IntelliTrace debugging, and allows 32-bit COM components to work correctly when interoperating with them. And, since most applications do not need a 64-bit address space, making the default x86 seems like a reasonable solution (for now). New DLL projects default to a platform of anycpu. |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed | Page 19 Last pargraph, last sentense |
"Also, note that Ngen'd images cannot be shared across AppDomains,..." is not correct because that limitation had been removed after NGen version 2.0. Please refer following documentation: http://msdn.microsoft.com/en-us/library/6t9t5wcf.aspx. Note from the Author or Editor: |
Anonymous | Mar 22, 2010 | Jul 08, 2011 |
Printed, PDF, , Other Digital Version | Page 33 Paragraph 1; Line 7 |
The sentence reads: Note from the Author or Editor: |
Daniel Fortunov | Sep 27, 2010 | Jul 08, 2011 |
Printed | Page 48 Second note, first pargraph |
A value 0x26 of CorTokenType is FileDef (or File) not FileRef. Note from the Author or Editor: |
Anonymous | Mar 22, 2010 | Jul 19, 2011 |
Printed | Page 73 3rd paragraph |
Microsoft moved the location of the .NET 4.0 GAC. The GAC is in the C:\Windows\Assembly directory for .NET 3.5 and earlier. For .NET 4.0, the directory is C:\Windows\Microsoft.NET\Assembly. |
Jeffrey Richter |
Mar 08, 2010 | Jul 08, 2011 |
Printed, PDF, , Other Digital Version | Page 76 Last Paragraph |
The text of first line says "Signing an assembly with a private key ensures that the holder of the corresponding public key produced the assembly." I think it should instead read "Signing an assembly with a private key ensures that the holder of the corresponding public key can consume the assembly." Note from the Author or Editor: |
Siva Chinta | Apr 13, 2011 | |
Printed | Page 82 Second bullet list item |
Manifest table which identifying files in the assembly is "FileDef" table, not "FileRef" table. |
Anonymous | Apr 04, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 89 Last paragraph (before last "Important" block) |
An erratum in the following sentence: |
artnib | Aug 30, 2010 | Jul 08, 2011 |
Printed | Page 97 Line 2 of note |
There is not "Conversion Operator Methods" section in Chapter 9, "Parameters" but in Chapter 8, "Methods." |
Anonymous | Apr 10, 2010 | Jul 08, 2011 |
110 Method name GenProgressReport in figures does not match GetProgressReport in text |
Figures 4-6 through 4-13 on pages 105 through 111 use GenProgressReport as the virtual method name from Employee both inside the M3 method and in the type object diagram but the text refers to the virtual method as GetProgressReport. It's pretty easy to figure out but I'll list them below just to be complete. Note from the Author or Editor: |
Steve Lasley | Feb 07, 2010 | Jul 08, 2011 | |
Printed | Page 149 First code |
"Private" on head of code is supposed to be "internal (or private)." Note from the Author or Editor: |
Anonymous | Mar 22, 2010 | Jul 08, 2011 |
150 Chaper 5, The Dynamic Primitive Type |
Note from the Author or Editor: |
Anonymous | Feb 19, 2010 | ||
Printed, PDF, | Page 150 listing 1 (after 4th paragraph) |
dynamic d1 = 123; //OK: Implicit cast from Int32 to dynamic (boxing) Note from the Author or Editor: |
artnib | Sep 14, 2010 | Jul 19, 2011 |
Printed, PDF, , Other Digital Version | Page 151 First paragraph |
If the M method invoked at runtime has a return type of void, an exception is thrown. Note from the Author or Editor: |
Anonymous | Sep 10, 2011 | |
Printed, PDF, | Page 152 Near middle of page |
"storing the Int32 result in a local variable (result):" |
Daniel Fortunov | Oct 04, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 152 Code listing on the bottom half of the page |
Whitespaces are missing after the 'new' keyword. Instead of "newType[]" and "newObject[]" it should be "new Type[]" and "new Object[]" respectively. |
Yuriy Guts | Jan 25, 2012 | |
Printed | Page 160 "Important" column |
StrongNameIdentityPermission does not work because |
Anonymous | May 15, 2010 | |
Printed, PDF, | Page 197 First Sentence |
Minor Grammar: "Such a call isn't necessary because none of a type's static fields *is* shared or inherited..." should be "...none of a type's static fields *are* shared or inherited..." |
Daniel Fortunov | Oct 09, 2010 | Jul 08, 2011 |
Printed | Page 202 Row 13 of Table 8-2 |
"Suggested CLS-Compliant Method Name" for oeprator '!=' is supposed to be "Equals", not "Compare." |
Anonymous | May 15, 2010 | Jul 08, 2011 |
Printed | Page 212 Middle of page |
It is written that "You can define extension methods for delegate types, too. For an example of this, turn to page 278 in Chapter 11, 'Events'." However, this sentence is not correct: (1) In the first place, page 278 is not Chapter 11 but Chapter 12 "Generics"; (2) While there is an example of event-related extension methods in page 265 (I think it is cool!), it is extensions method for EventArgs derived classes, not for delegate type. Where is an example of extension method for delegate? Note from the Author or Editor: |
Anonymous | Mar 22, 2010 | Jul 19, 2011 |
Printed | Page 219 Cpde at bottom of page |
In the declaration of the M method, spaces are missing between DateTime/dt and Guid/guid. |
Jeffrey Richter |
Apr 11, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 242 2nd Last Line |
"A property may be read-only or write-only; field access is always readable and writeable." |
Daniel Fortunov | Oct 09, 2010 | |
Printed, PDF, , Other Digital Version | Page 250 1 |
On page 250, in the last line of the code sampe it has wroten: private TRestm_Rest; It should be replaced with: private TRest m_Rest; (typo - the space is missed). |
Yuriy | Sep 30, 2010 | Jul 08, 2011 |
Printed | Page 251 Bottommost code fragment |
There should be a space between "var" and "minmax" on this line: |
Jeffrey Richter |
Apr 13, 2010 | Jul 08, 2011 |
Printed, PDF, , Other Digital Version | Page 251 First line |
The parameter of constructor - TRest t - doesn't match with assignment operation in the body of constructor - m_Rest = rest. |
Yuriy | Sep 30, 2010 | |
Printed, PDF, | Page 251-252 MinMax method listings |
Missing space between the return type parameter and the name of the MinMax method in two code listings. |
Daniel Fortunov | Oct 10, 2010 | |
Printed, PDF, | Page 263 code sample at the bottom |
EventHandler<EventArgs> temp = ... |
Michael Ludwig | Jun 27, 2012 | |
Printed | Page 264 // Version 2,3,4 |
protected void OnNewMail(NewMailEventArgs e) { |
skyiv | Oct 20, 2010 | Jul 08, 2011 |
Printed | Page 277 1st bullet list |
I agree that it is not subject for this book, but Java's generics actually does not require that source code is available from its user. |
Anonymous | May 23, 2010 | |
Printed | Page 288 line 7 of code |
'DateTimeList' in the comment should be 'dtl'. |
Anonymous | May 23, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 288 2nd code example |
var dtl = List<DateTime>(); |
Alastair Hails | Sep 01, 2010 | Jul 08, 2011 |
Printed, PDF | Page 292 Last Paragraph |
It Says: Note from the Author or Editor: |
Chris Greeno | Jul 27, 2010 | |
Printed | Page 309 Line 4 |
According to ECMA-335, defining static members on interface is not compliant with CLS (Common Language Specification), but it is part of CLI (Common Language Infrastructure). So "Common Language Infrastructure (CLI)-compliant interface" should be "Common Language Specification (CLS)-compliant interface." |
Anonymous | May 29, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 312 Third Example |
Please correct my English. Note from the Author or Editor: |
adaapanya | Mar 09, 2011 | Jul 08, 2011 |
Printed, PDF, | Page 319 3rd paragraph |
the book said ".., and therefore, calling an interface method on a value type always causes boxing." |
Leon Zhu | Oct 26, 2010 | |
Printed, PDF, | Page 326 line -3 |
non-generic IComparable's Compare |
skyiv | Oct 31, 2010 | Jul 08, 2011 |
Printed | Page 328 4th and 5th sentence of 3rd paragraph |
(1) |
YFujiwara | Jun 12, 2010 | |
Printed, PDF, | Page 356 2nd paragraph |
3rd line "Obviously, Format calls each object's IFormattableToString method...", actually no object has such a IFormattableToString method, instead we should say each object's IFormattable.ToString() method |
Leon Zhu | Nov 14, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 365 Last sentence of 3rd paragraph |
number of characters or number of bytes |
skyiv | Nov 03, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 365 Line 3 |
To convert an array of bytes to an array of characters, |
skyiv | Nov 03, 2010 | Jul 08, 2011 |
Printed | Page 391 Last sentense of 3rd bullet |
"If every object in the Object[] implements IFormattable[]" should be " If every object in the Object[] implements IFormattable" since each element must be IFormattable in this case. |
YFujiwara | Jun 19, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 401 1st paragraph |
the first line said, "... is about as fast as the safe two-dimensional array access technique..." |
Leon Zhu | Nov 30, 2010 | Jul 08, 2011 |
Printed | Page 403 5th bullet |
'Int16' and 'UInt16' are missing from a list of valid fixed array element types. |
YFujiwara | Jun 19, 2010 | Jul 08, 2011 |
Page 457 3rd paragraph |
"To understand how they work, we first need to look at the System.Nullable<T> class, which is |
John Triantafyllopoulos | Jul 17, 2010 | Jul 08, 2011 | |
Printed | Page 460 1st bullet item |
+++ should be ++,+ |
Zhou Jing | Jun 24, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 482 Method "Equals" in code sample (class Exception<TExceptionArgs>) |
Not actually an error in the text, but a bug in the code. The Equals method defined in Exception<TExceptionArgs> might throw a System.NullReferenceException if obj happens not to be of type Exception<TExceptionArgs>. (Line 3 in the method body: "other.m_args" will raise the exception.) |
andreasfrischknecht | Mar 23, 2011 | Jul 08, 2011 |
Printed | Page 483 middle of the page |
TextException() should be TestException() |
Zhou Jing | Jun 03, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 524 code example |
0000000d jle 0000002A |
Yuriy | May 14, 2011 | Jul 08, 2011 |
PDF, , Other Digital Version | Page 524 code example |
Probably, there is a typo in the following line of the code: |
Yuriy | May 14, 2011 | Jul 08, 2011 |
Printed | Page 533 7 line of code comment of Dispose(Boolean) method |
Comment of Dipose(Boolean) method says when ReleaseHandle returns TRUE then ReleaseHandleFailed MDA is fired. However, that MDA appears when ReleaseHandle returns FALSE not true. Please refer: http://msdn.microsoft.com/en-us/library/85eak4a0.aspx Note from the Author or Editor: |
Anonymous | Mar 22, 2010 | |
Printed, PDF, | Page 534 the topmost code |
should be: |
Zhou Jing | Oct 12, 2010 | |
Printed, PDF, | Page 534 2nd paragraph |
I was confused when I read the following text: "...and this class will override the protected constructor...". As far as I know, constructors can not be virtual (and abstract, of course) and, hence, they can not be overriden. Am I wrong? Note from the Author or Editor: |
Yuriy | Jun 17, 2011 | |
Printed, PDF, | Page 560 1st paragraph, 5th line |
Written in the book : "then Object-B has been collected" Note from the Author or Editor: |
adaapanya | Mar 21, 2011 | |
Printed, PDF, | Page 560 WeakReference<T> |
It is not clear why Dispose() of WeakReference<T> explicitly assign null to its field. Note from the Author or Editor: |
YFujiwara | Jun 14, 2011 | |
Printed, PDF | Page 562 WeakDelegate class |
Class WeakDelegate<TDelegate> (on page 562) has a logical bug and it simply will not work as expected. Implementation is creating following object structure: Note from the Author or Editor: |
Tomasz W?jcik | Feb 26, 2011 | |
Printed, PDF, | Page 573 Last paragraph (not including the code sample) |
You say that "... the GCNotification class raises an event whenever a generation 0 or generation 2 collection occurs." Note from the Author or Editor: |
Anonymous | Oct 09, 2010 | |
Printed, PDF, | Page 597 Ch22-1-AppDomains sample |
The comment at the first line of Marshalling method has the word "that" printed twice: |
artnib | Dec 05, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 600 From bottom line of page 600 to top 3 lines of page 601 |
The lines from "is not marked as serializable." to "at Program.Main()" might be duplicated in the list. |
Anonymous | Sep 11, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 602 before the note |
missing a space; newMarshalByRefType should be new MarshalByRefType |
Giovanni Lagorio | Aug 29, 2010 | Jul 08, 2011 |
Printed | Page 606 side note |
"When I ran this code, it took 134,174 milliseconds to access the instance field of a NonMBRO class that is derived from Object, and it took 1,533,886 milliseconds to..." |
Zhou Jing | May 24, 2010 | |
Printed, PDF, | Page 608 2nd paragraph, 3rd line |
It's written : create a MarshalByValType object in this new AppDomain |
adaapanya | Mar 26, 2011 | Jul 08, 2011 |
Printed, PDF, , Other Digital Version | Page 640 the last paragraph |
"In the case of a nested type, Name returns the concatenation of the name of the containing type...", but when I debug it, the Name only returns the nested type's name, while the MemberInfo.ToString() method shows the concatenation. Note from the Author or Editor: |
Leon Zhu | Sep 13, 2011 | |
Printed, PDF, | Page 654 in code |
There are several places in the source code that are very confusing, Note from the Author or Editor: |
Leon Zhu | Sep 15, 2011 | |
Printed, PDF, | Page 656 1st comment of UseDynamicToBindAndInvokeTheMember method |
This comment duplicates the comment of BindToMemberCreateDelegateToMemberThenInvokeTheMember. This should be like "Construct an instance (You can't use dynamic infrastructure to construct concrete instance)." |
Anonymous | Sep 24, 2010 | Jul 08, 2011 |
Printed, PDF, , Other Digital Version | Page 658 1st item of bullet list |
Type's static GetTypeHandle method returns the runtime handle of the type of specified object, not of the specified type object. For example: Note from the Author or Editor: |
YFujiwara | Sep 24, 2010 | Jul 08, 2011 |
Printed | Page 659 The code that calls the Show method |
The code contains calls to a Show method that is not printed in the book. You can see the Show method's code by downloading the code for the book from http://Wintellect.com, selecting Resources and then choose Books. |
Jeffrey Richter |
Feb 25, 2010 | |
Printed | Page 666 4th paragraph, |
"If the type's fields don't exactly match the names of the fields..., then a SerializationException exception is thrown...". Actually when I tried if the deserialization implies an string "Name" property of an specific class, while the assembly provided an Int32 "Name" property, an ArgumentException will be thrown. Furthermore, if, the deserialization can imply an class possess more properties than the one applied by the actual assembly, the new properties will be set to their default value when initializes. |
Leon Zhu | Sep 18, 2011 | |
Printed, PDF, | Page 670 3rd paragraph |
The book says "When this method is called, all the serializable fields will be set correctly and then may be accessed to perform any additional work ...", the sentence should be corrected as follows "... is called, all the serializable fields should have been set correctly and ..." |
Leon Zhu | Sep 19, 2011 | |
Printed | Page 672 1st paragraph |
I experimented both the following 2 scenario, |
Leon Zhu | Sep 19, 2011 | |
Printed | Page 682 Code at bottom of page |
The static field should be called "s_theOneObject" |
Jeffrey Richter |
Feb 25, 2010 | |
Printed, PDF, | Page 693 2nd paragraph |
In the Thread Environment Block (TEB) paragraph: Note from the Author or Editor: |
Anonymous | Jul 04, 2012 | |
Printed | Page 724 Code at top of page |
Missing space between CancellationTokenSource and cts |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 725 Last code snippet |
missing a space; varcts should be var cts |
Giovanni Lagorio | Aug 29, 2010 | Jul 08, 2011 |
Printed | Page 727 Code at bottom of page |
The comment at the bottom of the page should say "// if n is large, ..." |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed | Page 727 code at middle of page |
Missing space between enum and TaskCreationOptions. |
Zhou Jing | May 18, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 727 Last paragraph |
Missing space between 'Task<TResult>' and 'object'. |
Daniel Fortunov | Apr 29, 2011 | Jul 08, 2011 |
Printed | Page 729 Code at bottom of page |
Missing space between CancellationToken and ct |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed | Page 730 Code in the middle of the page |
Missing space between CancellationTokenSource and cts. |
Zhou Jing | May 19, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 730 Code at top of page |
The comment at the top of the page should say "// if n is large, ..." |
Daniel Fortunov | Apr 29, 2011 | Jul 08, 2011 |
Printed | Page 732 combinations of three flags |
NotOnCanceld should be NotOnCanceled |
Zhou Jing | May 19, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 732 First listing |
Missed space between enum and TaskContinuationOptions(second line). |
artnib | Jan 06, 2011 | Jul 08, 2011 |
Printed | Page 733 Code in the middle of the page |
Missing space between var and cwt |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 735 2nd Paragraph, line 3 |
RanToCompleted should be RanToCompletion. |
Daniel Fortunov | Apr 29, 2011 | Jul 08, 2011 |
Printed, PDF, | Page 735 |
The text: |
Daniel Fortunov | Apr 29, 2011 | Jul 08, 2011 |
Printed | Page 736 Code on the page |
Spaces are missing between some code identifiers: |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 736 Middle of code listing |
Minor inconsistency: |
Daniel Fortunov | Apr 29, 2011 | |
Printed, PDF, | Page 737 "Note" section |
On page 737, at the "Note" section, you have written : "Note When calling TaskFactory?s or TaskFactory<TResult>?s static ContinueWhenAll and ContinueWhenAny methods, ...". Note from the Author or Editor: |
Yuri | Jun 10, 2012 | |
Printed | Page 738 Code in middle of page |
Space missing between internal and sealed |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 741 Code listing |
Missing space between type and name of all three properties in the code listing. |
Daniel Fortunov | Apr 29, 2011 | Jul 08, 2011 |
Printed | Page 742 Code at top of page |
Missing space between SearchOption and searchOption. |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed, PDF, , Other Digital Version | Page 742-3 Code listing at bottom of page |
Missing space between 'Boolean' and 'IsStopped'. |
Daniel Fortunov | Apr 30, 2011 | Jul 08, 2011 |
Printed | Page 743 Code just below middle of the page |
The first line of code is missing some space. it should like this: public struct ParallelLoopResult { |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed | Page 744 Code |
There are spaces missing in the code: |
Jeffrey Richter |
Feb 25, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 744 Code in middle of page |
Code missing spaces: |
Brandon Young | Jan 15, 2011 | Jul 08, 2011 |
Printed | Page 754 1st paragraph |
[quote] |
Zhou Jing | May 22, 2010 | Jul 08, 2011 |
756 Figure 27-1 |
On #6, it reads "...Hardward does I/O;...". It should read "...Hardware does I/O;...". Note from the Author or Editor: |
FrankL | Feb 05, 2010 | ||
Printed | Page 759 the footnote |
... if the running threads have lower priorities. Note from the Author or Editor: |
Zhou Jing | May 23, 2010 | |
Printed | Page 763 1st paragraph |
"Once a client connects, the ClientConnect method..." |
Zhou Jing | May 24, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 770 Line 2 of the Note callout |
The following text: |
Daniel Fortunov | May 01, 2011 | Jul 08, 2011 |
Printed | Page 780 |
It would be good to mention in the "FileStream-Specific Issues" section that all of the static convenience methods on the File class (such as File.CreateText() and File.OpenRead()) create a FileStream for synchronous access -- you must create the FileStream instance yourself if you want performant asynchronous operations. Note from the Author or Editor: |
Daniel Fortunov | May 01, 2011 | |
Printed | Page 788 the whole "Comparing the APM and the EAP" section |
Should I change all EPMs to EAP? Note from the Author or Editor: |
Zhou Jing | May 27, 2010 | Jul 08, 2011 |
Printed | Page 788 2nd paragraph |
"...the EAP must allocate EventArg-derived objects..." |
Zhou Jing | May 27, 2010 | Jul 08, 2011 |
Printed | Page 789 2nd bullet item |
PreFairness should be PreferFairness |
Zhou Jing | May 27, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 790 |
In accordance with the Page 788 comment (and response) regarding EPM vs EAP; if EAP is the chosen term than "Event-based PM" in the table on page 790 should probably read "Event-based EAP" for clarity and consistency. Note from the Author or Editor: |
Daniel Fortunov | May 01, 2011 | Jul 08, 2011 |
Printed, PDF, | Page 790 |
This table refers to RegisterWaitForSingleObject however this method is not discussed at all in the book until the following chapter. A footnote may be in order to point this out. Note from the Author or Editor: |
Daniel Fortunov | May 01, 2011 | |
Printed | Page 805 the final line |
AllBegin should be AllBegun |
Zhou Jing | May 29, 2010 | Jul 08, 2011 |
Printed | Page 805 the footnote |
AboutToBeging should be AboutToBegin |
Zhou Jing | May 29, 2010 | Jul 08, 2011 |
Printed | Page 806 code of AsyncCoordinator class, 2nd line, the comment |
"Decremented by AllBegun" Note from the Author or Editor: |
Zhou Jing | May 29, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 811 "The Interlocked Anything Pattern", line 3 |
The following text: |
Daniel Fortunov | May 02, 2011 | Jul 08, 2011 |
Printed, PDF, | Page 812 2nd paragraph, 3rd line |
"derivedVal" should be "desiredVal." |
Anonymous | Sep 21, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 822 First code listing |
In the following code, taken from the Enter method: Note from the Author or Editor: |
Jesus Requejo | Feb 17, 2011 | Jul 08, 2011 |
Printed, PDF, | Page 829 "A Potpourri of Hybrid Constructs", line 4 |
The following text: |
Daniel Fortunov | May 02, 2011 | Jul 08, 2011 |
Printed, PDF, | Page 832 bottom of the page, in the code |
the comment in LastTransaction.get says "has shared access", while it should say "exclusive" |
Giovanni Lagorio | Aug 29, 2010 | Jul 08, 2011 |
Printed | Page 838 note |
ReaderWriterLockSlim was introduced in .NET Framework version 3.5 not 2.0. Please refer Version Information section of following: http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx |
Anonymous | Mar 22, 2010 | Jul 08, 2011 |
Printed, PDF, | Page 838 2nd Paragraph |
Page 838 Paragraph 2 outlines why you don't think upgrading a ReaderWriterLockSlim is a useful thing, and ends with "This is the same as having the reader thread exit the lock and then immediately acquire it for writing." Note from the Author or Editor: |
Daniel Fortunov | May 02, 2011 | |
Printed | Page 839 middle of the page |
"If RW==0 && WW = 0:" |
Zhou Jing | Jun 02, 2010 | Jul 08, 2011 |
Printed | Page 840 3rd bullet item |
"Wake all reader blocked read threads" |
Zhou Jing | Jun 02, 2010 | Jul 08, 2011 |
Page 850 inside Dequeue method |
The following statement |
snow bear | Jul 16, 2010 | Jul 08, 2011 | |
Printed | Page 858 code comments |
// true if AddingComplete is called |
Zhou Jing | Jun 11, 2010 | Jul 08, 2011 |