2010-08-17 13 views
6

Wenn die Anwendung auf Windows Vista oder höher ausgerichtet ist, können wir alle critical sections durch SRW locks ersetzen? Da sich der kritische Abschnitt gegenseitig ausschließt, entspricht er zur Verwendung den SRW-Sperren im exklusiven Modus, richtig? Laut MSDN ist SRW sowohl für Geschwindigkeit als auch für Speicherplatz optimiert. Gibt es einen Nachteil dafür? Ich bin mir nicht sicher, wie CS und SRW intern von Microsoft implementiert werden.Ersetzen kritischer Abschnitt durch SRW-Sperre

Danke!

Antwort

7

Siehe Joe Duffy Buch "Concurrent Programming Windows", S. 289.

Die kurze Antwort auf Ihre Frage ist "fast". Es gibt Semantiken mit rekursiv erfassten CRITICAL_SECTIONs, die für SRWLs unterschiedlich sind. Wenn Ihr Programm diese Merkmale der kritischen Abschnitte von Win32 ausnutzt, können Sie nicht einfach auf SRWL umsteigen. Sie könnten jedoch eine SRWL in einen Wrapper einbetten, um CS wie Semantik zu erstellen, aber es gibt eine Reihe von Feinheiten dabei, so dass Sie lieber bei CS bleiben, wenn Sie von einem solchen Verhalten abhängig sind.

Kenny Kerr's article beschreibt ein wenig darüber, wie beide intern implementiert werden.