Как написать автоматизированный тест для безопасности потока
У меня есть класс, который не является потокобезопасным:
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.