This document discusses concurrent programming with real-time operating systems (RTOS). It begins with an overview of RTOS and what they provide to programmers, such as task management, synchronization primitives, and driver packages. It then discusses specific RTOS concepts like tasks, concurrency primitives like semaphores, and common concurrency problems like data races. Examples are given to demonstrate task creation and using semaphores to safely increment a shared variable between tasks. The document concludes with discussing classical concurrency problems like the dining philosophers problem and potential issues that could arise like deadlock or starvation.