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” ↩