What is the significance of the volatile keyword in C, and can you provide a real-world scenario where omitting it would cause system failure?