Notes

1http://docwiki.embarcadero.com/RADStudio/en/Compiler_Versions

2https://msdn.microsoft.com/en-us/library/windows/desktop/ms684242(v=vs.85).aspx

3http://www.thedelphigeek.com/2010/03/speed-comparison-variant-tvalue-and.html

4Read more at http://www.thedelphigeek.com/2012/07/asyncawait-in-delphi.html.

5https://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx

6https://en.wikipedia.org/wiki/Critical_section

7http://docwiki.embarcadero.com/Libraries/en/System.SyncObjs.TCriticalSection

8IOmniCriticalSection doesn’t use TCriticalSection directly, but wraps it into a larger object as suggested by Eric Grange.

9http://stackoverflow.com/questions/4856306/tthreadedqueue-not-capable-of-multiple-consumers

10http://www.thedelphigeek.com/2011/05/tmonitor-bug.html

11http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.TMultiReadExclusiveWriteSynchronizer

12http://edn.embarcadero.com/article/28258

13A collision occurs when a writer wants to access an object with active readers or a reader wants to access an object with an active writer.

14Initializing an object is, of course, not a problem at all if the object is used only in a single task.

15https://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx

16https://msdn.microsoft.com/en-us/library/windows/desktop/aa363804(v=vs.85).aspx

17https://msdn.microsoft.com/en-us/library/windows/desktop/dd405495(v=vs.85).aspx

18SamplesDelphiDatabaseIBXFishFact

19While this was true at the time of the writing (2012), this bug was later fixed and nowadays such synchronization technique is not necessary anymore.

20http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/fhxr18643_xml.html

21“IBTable1: Field ‘SPECIES_NO’ not found”