Not really. It really is a very simple and easy program. The problems that you will run in to when executing a multi-tasking program are ones such as data synchronization issues, and communicating between linked threads.
Remember, you have a CPU with a thread or threads that can be stopped or started at any given point. There is no guarantee that any programmatic execution order is maintained unless you manually take steps to make sure things go correctly.
I think that what the purpose of this assignment was was to have you come to an understanding that once you deserialize events in an OS, a randomness factor is introduced that must be handled or the results will be chaos. We just barely scratched the surface of "real-time" programming where things like task priorities, interrupt latency, deadlock, and priority inversion come into play.
The basic technique to follow is to lock critical sections, and if the lock was granted, modify what needs to be modified, and release the lock. If the lock is not granted, then wait until it is granted because someone else is doing something at the moment and you could clobber what they are doing if you do your modifications at the same time or vice versa.
Have fun!