Actually, there are advantages to embracing single-OS-thread programming. It's an incredibly efficient use of CPU resources, and you generally don't need explicit locking. Resulting programs are much easier to understand, maintain, and diagnose. (I work daily on a complex, soft real-time, production app written by a team of developers, and the code has no locks.)