Overview of multithreading and semaphores
This is material that would normally be covered in an operating systems course or in a course on multithreaded programming. In UBC, EECE 314 and EECE 315 should provide you with the relevant information. (And so should the equivalent CPSC courses.)