Die Kunst bei der Multithread-Programmierung liegt im Vermeiden von Deadlocks, dem Schützen des Zugriffs auf Ressourcen und dem Sicherstellen der Thread-Synchronisierung. Windows Embedded Compact umfasst mehrere Kernelobjekte zum Synchronisieren des Ressourcenzugriffs für Threads in Treibern oder Anwendungen, beispielsweise Critical Sections, Mutexe, Semaphores, Events und Interlock-Funktionen. Die Auswahl des Objekts hängt von der Aufgabe ab, die ausgeführt werden soll.
Critical Sections sind Objekte, die in einem einzigen Prozess die Threads synchronisieren und den Zugriff auf Ressourcen schützen. Der Zweck einer Critical Section liegt darin, gemeinsam genutzte Ressourcen während des Synchronisierungsvorganges vor dem Zugriff durch andere Prozesse zu schützen. Um auf eine durch einen kritischen Abschnitt geschützte Ressource zuzugreifen, ruft ein Thread die Funktion EnterCriticalSection auf. Diese Funktion blockiert den Thread, bis die in der Critical Section angesprochene Ressource verfügbar ist.
Im Gegensatz zu kritischen Abschnitten, die auf einen einzigen Prozess beschränkt sind, können Mutexe (Listing 1) den unabhängigen Zugriff auf die von mehreren Prozessen verwendeten Ressourcen koordinieren. Ein Mutex ist ein Kernelobjekt, das die prozessübergreifende Synchronisierung unterstützt. Um einen Mutex zu erstellen, wird die Funktion CreateMutex aufgerufen. Die Threads in anderen Prozessen können CreateMutex ebenfalls aufrufen und den gleichen Namen angeben. Diese nachfolgenden Aufrufe erstellen jedoch keine neuen Kernelobjekte, sondern geben an den vorhandenen Mutex ein Handle zurück. Die Threads in separaten Prozessen können das Mutex-Objekt nun zum Synchronisieren des Zugriffs auf die geschützte, freigegebene Ressource verwenden. Das Event-Objekt ist ein weiteres Kernelobjekt, das Threads synchronisiert. Dieses Objekt ermöglicht Anwendungen, anderen Threads mitzuteilen, wenn eine Aufgabe beendet ist oder Daten für potentielle Leser verfügbar sind.