MFC-Synchronisationsobjekte wirklich alle fehlerhaft?



  • Hallo,

    ich lese mich derzeit zu

    CCriticalSection
    

    , ect. ein und bin dabei auf folgende Aussage gestoßen:

    http://www.flounder.com/avoid_mfc_syncrhonization.htm

    Wie hoch ist hier der Wahrheitsgehalt und ist an dem Vorwurf was dran?
    Wenn ja, gilt das heute noch?
    Wie ist euer Erfahrungswert bei den Synchronisationsobjekten?

    MfG


  • Mod

    Nö... finde ich nicht.

    1. Mutex. Wen FALSE zurückkommt kann man IMHO immer noch GetLastError verwenden.
    2. Das man CSingleLock::Lock nicht mehrfach aufrufen kann ist totaler Blödsinnn. Das ist ja 3/4 seiner ganzen Kritik und er führt es bei jedem Punkt einzeln auf.
    Der eigentliche Sinn ist nicht .Lock/.Unlock zu verwenden sondern RAI und Konstruktrer und Destruktoren das machen zu lassen. Man kann ja mehrere CSingleLock Objekte mit einem Synch-Objekt verbinden und sicherlich ddaurch mehrfach (rekursiv) auch Lock dadurch aufrufen.
    Die CSingleLock Objekte gehören in einen Skope, wenn ich den Lock brauche!

    Ich finde die Kritik nicht sinnreich.
    Joseph übetreibt gerne. Er ist überhaupt ein ganz "extremer Mensch" wenn man das so sagen kann, aber dennoch nett. Aber diskutieren kann man mit ihm eigentlich nicht... 😉



  • Er demonstriert damit doch nur dass er das Prinzip von CSingleLock (scoped_lock, unique_lock etc.) nicht verstanden hat.
    Abgesehen von der Sache mit WAIT_ABANDONED ist der Artikel kompletter Quatsch.

    Ob der Author nett ist oder nicht kann ich nicht beurteilen, ich kenne ihn nicht. Ich mag es aber generell nicht wenn jemand totalen Stuss verbreitet. Umso schlimmer wenn er dabei versucht den Eindruck zu erwecken er hätte Ahnung von dem was er verzapft.

    Wie ist euer Erfahrungswert bei den Synchronisationsobjekten?

    Ich verwende in einigen Projekten massiv CCriticalSection + CSingleLock, und hatte damit noch nie Probleme. Man muss es nur richtig anwenden. Üblicherweise sind CSingleLock lokale Objekte die "auf dem Stack" angelegt werden, und beim Verlassen des Scopes automatisch den Lock wieder freigeben.

    Der WAIT_ABANDONED "Fehler" bei Verwendung von CSingleLock + CMutex ist dagegen real. Spielt aber keine Rolle, so lange man die CMutex nur innerhalb eines einzigen Prozesses verwendet, und dieser keine Bugs hat.



  • Also doch quasi alles in Ordnung.

    Dank an euch!


Log in to reply