That Gate sounds like a FreeRTOS event group could be used.
Our system is a bit funny. There’s a common framework, and the tasks should have been waiting suspended, when the framework initialization function returned. And that was not the case. Also, most of the tasks are “modules” that handle a certain interface, and once created, could be used in other projects too. Some tasks are still project specific and act more like a glue between the “module”-tasks.
The framework was originally made for a safety-critical system, and it had a simple executive, instead of a pre-emptive scheduler. The FreeRTOS “kernel” is sort of “alternative scheduler + synchronization”. There’s also messaging made on top of FreeRTOS, but that is not used in our system. The idea is, that the tasks don’t see whether they run on the original configuration or FreeRTOS-based configuration. All tasks still work without any modifications.
The point of the executive is, that it gives an error, if the system is not schedulable in a rate monotonic way.