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

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

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

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

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

12A 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.

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

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

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

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

17http://blogs.msdn.com/b/pfxteam/archive/2012/04/12/10293335.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”