Hello (you don't show enough to understand what's wrong; maybe you should post a mini-project that reproduces your problem),
1°) you can encapsulate a TCriticalSection (of code), in a field of your TForm (even if the critical sections are global objects provided by the OS).
2°) you can create and destroy your critical section, in your FormCreate and FormDestroy events.
3°) you must, of course, then protect a part of your source code from "race conditions" between threads, with a call to FoCriticalSection.Enter and a call to FoCriticalSection.Leave;
==> If you want to see an example of using a critical code section, which works under Ubuntu, I advise you to read the Multilog package, and especially the MultiLog.pas unit. It uses the FCL TCriticalSection class, that encapsulates the CriticalSection object's API of the OS.