This week, we covered semaphores and common concurrency bugs. Semaphores are a type of primitive which work as both locks and condition variables. They were created by Edsgar Djikstra as a solution to many issues related to concurrency. Some concurrency issues we looked at were order violation bugs, atomicity bugs, and deadlock-related bugs.