Multi-core processors are capable of executing tasks on independent execution cores concurrently. Embedded software developers are challenged with determining how to distribute and properly program the work. A common technique in shared memory processing is multithreading. This class focuses on the Threading Development Cycle (TDC), which includes analysis, design, debugging, and tuning for multithreading. The class includes some common challenges to overcome when threading such as data races & cache conflicts as well as tools support and practical techniques available to assist with stability and performance. Case studies include a data parallel application and a functional parallel application to reinforce the discussion.