Cómo escribir una prueba automatizada para la seguridad del hilo
Tengo una clase que no es segura para subprocesos:
class Foo {
/* Abstract base class, code which is not thread safe */
};
Además, si tiene objetos foo1 y foo2, no puede llamar a foo1-> someFunc () hasta que foo2-> anotherFunc () haya regresado (esto puede suceder con dos hilos). Esta es la situación y no se puede cambiar (una subclase de Foo es en realidad un contenedor para un script de Python).
Para evitar llamadas no deseadas, he creado lo siguiente:
class FooWrapper {
public:
FooWrapper(Foo* foo, FooWrappersMutex* mutex);
/* Wrapped functions from Foo */
};
Internamente, FooWrapper ajusta las llamadas a las funciones de Foo con el mutex compartido.
Quiero probar FooWrapper para la seguridad del hilo. Mi mayor problema es el hecho de que los hilos son administrados por el sistema operativo, lo que significa que tengo menos control sobre su ejecución. Lo que me gustaría probar es el siguiente escenario:
El hilo 1 llama a fooWrapper1-> someFunc () y bloquea mientras está dentro de la funciónEl subproceso 2 llama a fooWrapper2-> anotherFunc () y regresa de inmediato (ya que someFunc () aún se está ejecutando)El hilo 1 finaliza la ejecución¿Cuál es el más simple para probar un escenario como este automáticamente?
Estoy usando QT en Win32, aunque preferiría una solución que sea al menos multiplataforma como lo es QT.