Wie schreibe ich einen automatisierten Test für Threadsicherheit?

Ich habe eine Klasse, die nicht threadsicher ist:

class Foo { 
    /* Abstract base class, code which is not thread safe */ 
};

Mehr, wenn Sie foo1- und foo2-Objekte haben, können Sie foo1-> someFunc () erst aufrufen, wenn foo2-> anotherFunc () zurückgegeben wurde (dies kann mit zwei Threads geschehen). Dies ist die Situation und kann nicht geändert werden (eine Foo-Unterklasse ist eigentlich ein Wrapper für ein Python-Skript).

Um unerwünschte Anrufe zu vermeiden, habe ich Folgendes erstellt -

class FooWrapper {
public:
    FooWrapper(Foo* foo, FooWrappersMutex* mutex);
    /* Wrapped functions from Foo */
};

Internal schließt FooWrapper Aufrufe an die Foo-Funktionen mit dem gemeinsam genutzten Mutex zusammen.

Ich möchte FooWrapper auf Threadsicherheit testen. Mein größtes Problem ist die Tatsache, dass Threads vom Betriebssystem verwaltet werden, was bedeutet, dass ich weniger Kontrolle über ihre Ausführung habe. Was ich testen möchte, ist das folgende Szenario:

Thread 1 ruft fooWrapper1-> someFunc () auf und blockiert innerhalb der FunktionThread 2 ruft fooWrapper2-> anotherFunc () auf und kehrt sofort zurück (da someFunc () noch ausgeführt wird)Thread 1 beendet die Ausführung

Was ist das einfachste, um ein solches Szenario automatisch zu testen?

Ich verwende QT unter Win32, obwohl ich eine Lösung vorziehen würde, die zumindest plattformübergreifend ist wie QT.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage