Choosing Between Mutex, Semaphore, and Queue

I’ve read many documents about mutex, semaphore, and queue in RTOS, but I’m confused about when to use each. My understanding is that mutex is for protecting one task, semaphore for multiple tasks, and queue for communication without sharing memory. What are your thoughts on choosing between mutex, semaphore, and queue?

You want to read this here book:

in particular, chapters 6 and 7.

Or, really, any text book on concurrency.

My current understanding is that Mutex allowing only one task at a time to access it.
Semaphore allowing multiple tasks to access shared resources concurrently within specified limits.
queue for communication between tasks, enabling them to share data without direct memory access.
Could you please review my understanding and correct me if I’m wrong?

Do read the chapters I pointed out in the book. That will answer your questions.