Great for simple synchronization (e.g., an interrupt tells a task to process data). Counting Semaphores: Used for managing a pool of resources.

❌ Use vTaskDelay() to let other tasks run.

Supports over 40 architectures (ARM, ESP32, RISC-V).