Das müsstest Du streng genommen in der Dokumentation der FTDI-DLL
nachschauen, denn das hängt von der Implementierung der Funktionen darin
ab.
Wenn es pro Device nur einen Thread gibt, können eigentlich keine
Konflikte entstehen. Du hast ja zu jedem Device ein eigenes Handle. Das
ist normalerweise ein Zeiger auf eine devicespezifische Instanz einer
Datenstruktur oder sogar identisch zum Windows-File-Handle des Devices.
Damit sind die Devices komplett unabhängig voneinander, sofern die DLL
nicht noch unsynchronisiert auf andere "globale" Resourcen zugreift.
Selbst bei mehreren Threads pro Device würde ich auf Ebene einzelner
Funktionsaufrufe keine Probleme erwarten, da Windows die
File-Operationen pro Handle schon intern synchronisiert. Außerdem sorgt
ein ordentlich implementierter Gerätetreiber ebenfalls dafür, dass
Befehle, die nicht parallel möglich sind, synchronisiert werden, sogar
prozessübergreifend.
Wenn Du allerdings z.B. ein Kommando per Write an das Device sendest und
dann per Read die Antwort auf das Kommando liest, musst Du selber dafür
sorgen, dass zwischen dem Write und dem Read kein anderer Thread auf das
gleiche Device zugreift. Das kann bei Dir aber ja nicht passieren, wenn
Du pro Device ohnehin nur einen Thread hast.