Multi-threading and thread synchronization