Had to re-start my project because I found a fatal flaw, in doing so however I managed to come up with a way to safely use non-thread safe functions without the use of mutexes and semaphores, probably needs a bit of tweaking but I got my "Hello World!" sample to run without issues, including notifying the main thread when the child thread died, seeing how it plays with glfw & opengl later should be interesting, in either case I satisfied this is the way to go with future multi-threading code.

Hello World! (76a0c6ea) * Commits * Lee Shallis / Dragonbuilder * GitLab

Turned out the key was simply to use time_t to queue messages/signals, I used 3, one that only the main thread may write to but the child threads may read and vise versa for child threads, the 3rd one is for indicating to the main thread if a message has been noticed by the thread that was waiting for the next message, might not even need the thread to "resend" objects should the thread need to send a "continue" message while waiting for it's own "continue" message (that one's still to be tested, minor fix if not the case).