I'm assuming this is for homework, because if you're writing a multithreaded app for any other purpose, you'd want to use a native threading library (probably the one in the .NET framework, though you could use MFC or ATL/WTL), and using a garbage collected language with built in synchronization constructs is probably a good idea (C#, Java, VB 7 or later [aka VB.NET]). Getting multi-threaded code to work correctly is hard; there's no reason to create problems for yourself by using inapproriate tools.