写多线程程序的一个最具挑战性的问题就是,如何让一个线程和另一个线程合作。除非你让它们同心协力。否则必然会出现“race conditions”(竞争条件)和“data corrupton”(数据被破坏)的情况。
在典型的办公室文化中,协调工作是由管理者来执行的。类似的解决方案,也就是“让某个线程成为大家的老板”。当然可以在软件中实现出来,但是每逢它们需要指挥时,就要它们排队等待,其实有着严重的缺点,通常那会使得队伍又长又慢。这对于一个高效率的电算系统而言,实在不是一个有用的解决方案。
Win32中关于进程和线程的协调工作是由同步 机制来完成的。同步机制相当于线程之间的红绿灯。你可以设计让一组线程使用同一个系统。这个红绿灯系统负责给某个线程绿灯而给其他线程红灯。这组红绿灯系统必须确保每一个线程都有机会获得绿灯。
有多种同步机制可以运用。使用哪一种则完全视欲解决的问题而定。当我讨论每一种同步机制时,我会说明“何时”以及“为什么”应该使用它。
这些同步机制常常以各种方式组合在一起,而产生出更精密的机制。如果你把那些基本的同步机制视为建筑物的小件组块,你就能够设计出更适合你的特殊同步机制。