Habe das gleiche CS wie oben verwendet nur das ich das INIT und DELETE in Const-/bzw. Destruktor hatte. Hat wieder den gleichen Fehler gegeben wie wenn ich das CS ganz weg lasse. Da er dann gelegentlich zweimal in dirketer Folge (von unterschiedlichen Threads) das INIT verwendet hat. Und dass, das vorherige LOCK platt gemacht hat.
Soll das heißen du hast in beiden Threads InitializeCriticalSection() aufgerufen? Warum?
Habe ich mir gedacht. Aber ich finde es genauso flasch den CS zu blockieren. Und das mit den unterschiedlichen SCOPES ist nunja ... Nicht jeder andere Programmierer bedenkt das.
"Das mit den Scopes" ist die bei weitem eleganteste mir bekannte Lösung. Es ist automatisch exception safe und es kann niemals passieren dass man ein LeaveCriticalSection() vergisst (z.B. wenn man schnell mal wo mittendrin ein return; einbaut). Mit diesem Prinzip (RAII) sollte jeder C++ Programmierer vertraut sein da es zum Handwerkszeug eines C++ Programmierers gehört.