VC多线程有关问题

VC多线程问题
我需要创建一个线程
如果List不为空, 就遍历List.
在主线程里可以向List添加元素..
但是线程把List死锁了, 主线程向List添加的时候会卡住..
也不知道主线程卡住是不是因为线程独占了List的原因....


以下问题才是重点..

我创建两个线程, 同时执行cout << "123" << endl;
但是输出的时候并不是
123
123
...
这样输出, 而是两个线程都把123拆开混乱输出了..
请问要怎么解决这个问题呢???

------解决方案--------------------
1.CMutex
2.CEvent
3.Critical Section (不支持进程同步)
4.Semaphore

4个关键字随便挑一种,搜索,例子应该都很全吧