Kritik bölümler çalışacaktır (bunlar muteks ağırlıklardır.) InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection ve DeleteCriticalSection, MSDN'de aranacak işlevlerdir.
void func()
{
// cs previously initialized via InitializeCriticalSection
EnterCriticalSection(&cs);
operation1();
operation2();
LeaveCriticalSection(&cs);
operation3();}
}
DÜZENLEME: kritik bölümleri öncelikle kullanıcı modu ilkel olduğundan Kritik bölümler muteksler daha hızlıdır - Bir uncontended edinilen (genellikle sık karşılaşılan durum) çekirdeğin içine hiçbir sistem çağrı var olması durumunda ve edinme alır düzinelerce döngü sırasına göre. Bir çekirdek anahtarı daha pahalı (yüzlerce döngüde). Kernelin çekirdeğe girmesini gerektiren tek zaman kritik bölümleri, bir çekirdek ilkelini (muteks veya olay) beklemeyi içeren, engellemek içindir. Bir muteks elde etmek, her zaman çekirdeğe bir çağrıyı içerir ve bu nedenle büyüklükleri daha yavaştır. Ancak kritik bölümleri tek işlemde kaynaklarını senkronize etmek kullanılabilir. Birden çok işlem arasında senkronize etmek için bir muteks gereklidir.
Doğru şimdiye kadar, ama bildiğim kadarıyla CriticalSections içten muteksleri kullandığından, performans yararı yoktur. –
Ve sonra istisna güvenliği için cs'yi bir sınıfa sarabilirsiniz; RAII'ye bakın. – Reunanen
(Soru C++ ile ilgili olduğundan). – Reunanen