How do you use mutexes, semaphores, and queues in an RTOS environment to manage shared resources safely in embedded firmware at 10x Genomics?