Как написать автоматизированный тест для безопасности потока

У меня есть класс, который не является потокобезопасным:

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

Более того, если у вас есть объекты foo1 и foo2, вы не можете вызывать foo1-> someFunc () до тех пор, пока не будет возвращена функция foo2-> anotherFunc () (это может произойти с двумя потоками). Это ситуация, и ее нельзя изменить (подкласс Foo на самом деле является оберткой для скрипта Python).

Чтобы предотвратить нежелательные звонки, я создал следующее:

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

Внутренне, FooWrapper упаковывает вызовы функций Foo с помощью общего мьютекса.

Я хочу проверить FooWrapper на безопасность потоков. Моя самая большая проблема заключается в том, что потоки управляются операционной системой, что означает, что у меня меньше контроля над их выполнением. Я хотел бы проверить следующий сценарий:

Поток 1 вызывает fooWrapper1-> someFunc () и блокирует внутри функцииПоток 2 вызывает fooWrapper2-> anotherFunc () и немедленно возвращается (так как someFunc () все еще выполняется)Поток 1 заканчивает выполнение

Как проще всего протестировать подобный сценарий автоматически?

Я использую QT на Win32, хотя я бы предпочел решение, которое по крайней мере кросс-платформенное, как QT.

Ответы на вопрос(6)

Ваш ответ на вопрос