Again, be certain you NEED an RTOS, and then that you NEED preemption since it adds great complexity and heightens the need for really well experienced software design to be correct.
The traditional C libraries contain many non-reentrant functions such as vprint and the related printf, fprintf, et al, and the time calls, and others. Some professional grade run time libraries mated with good compilers have reentrant versions. I don't know how to know which are and are not reentrant, other than by looking at a linker's map and see if a given module has static variables in it.
One can design a multi-tasking system to have a single task do all printf's, (or be the single task using any other resource or I/O device). Other tasks then use a message queue to pass data to the single task. That avoids the reentrancy issues.
mbed is a great tutoring device. It's not intended for a production product. You can start with the issue that it's a demo/eval item, not a production item, so it typically will go away in a year or less, and/or mutate.
The contributed code for mbed is neat, but it has no unifying basis for compatibility. The projects are demos, stove-pipe-like, and not intended to be anything more than that. in the main, as I see it. Again, it's a rapid demo/experiment or one-of-a-kind app platform, not a rapid product development platform.
ARM, to their credit, is providing CMSIS as a basis help reduce duplication of effort for more product oriented work, or so it seems.
thank you very much!