Counting semaphore là gì

Khi nào chúng ta nên sử dụng mutex và khi nào chúng ta nên sử dụng semaphore?

Semaphore là một khái niệm lập trình thường được sử dụng để giải quyết các vấn đề đa luồng. Câu hỏi của tôi với cộng đồng:

Một semaphore là gì và làm thế nào để bạn sử dụng nó?