C++ - Exception-Handling In Kritischen Abschnitt (pthreads)

[Edit: (kopiert aus einem Kommentar), Wie es sich herausstellt, lag das problem woanders, aber ich danke Ihnen allen für Ihre Eingabe.]

Ich haben ein gemeinsames container-Klasse, die verwendet eine einzelne mutex zu sperren, push() und pop () - Funktionen, da ich nicht möchte, gleichzeitig zu ändern, den Kopf und Schwanz. Hier ist der code:

int Queue::push( WorkUnit unit )
{
    pthread_mutex_lock( &_writeMutex );
    int errorCode = 0;

    try
    {
        _queue.push_back( unit );
    }
    catch( std::bad_alloc )
    {
        errorCode = 1;
    }

    pthread_mutex_unlock( &_writeMutex );

    return errorCode;
}

Wenn ich dies im debug-Modus, alles ist peachy. Wenn ich im release-Modus, bekomme ich die Abstürze in etwa die Zeit, wenn das Treiber-Programm beginnt, schieben und knallen "gleichzeitig". Funktioniert der try/catch-block sofort einen Ausstieg, wenn es fängt eine std::bad_alloc-Ausnahme? Wenn dem so ist, sollte ich schließen Sie den Rest der Funktion in einem finally-block?

Außerdem ist es möglich, dass die langsameren debug-Modus nur gelingt, weil meine push() und pop() ruft eigentlich nie zur gleichen Zeit auftreten?

  • Was ist die Art des Absturzes? Und könnte Sie posten die pop() Funktion zu?
InformationsquelleAutor psublue | 2010-01-06
Schreibe einen Kommentar