Como escrever um teste automatizado para segurança de threads
Eu tenho uma classe que não é thread-safe:
class Foo {
/* Abstract base class, code which is not thread safe */
};
Além disso, se você tiver objetos foo1 e foo2, não poderá chamar foo1-> someFunc () até foo2-> anotherFunc () retornar (isso pode acontecer com dois threads). Essa é a situação e não pode ser alterada (uma subclasse Foo é na verdade um invólucro para um script python).
Para evitar chamadas indesejadas, criei o seguinte -
class FooWrapper {
public:
FooWrapper(Foo* foo, FooWrappersMutex* mutex);
/* Wrapped functions from Foo */
};
Internamente, o FooWrapper agrupa as chamadas para as funções do Foo com o mutex compartilhado.
Quero testar o FooWrapper quanto à segurança de threads. Meu maior problema é o fato de os threads serem gerenciados pelo sistema operacional, o que significa que tenho menos controle sobre a execução deles. O que eu gostaria de testar é o seguinte cenário:
O segmento 1 chama fooWrapper1-> someFunc () e bloqueia enquanto estiver dentro da funçãoO segmento 2 chama fooWrapper2-> anotherFunc () e retorna imediatamente (pois someFunc () ainda está em execução)O segmento 1 termina a execuçãoQual é o mais simples de testar um cenário como esse automaticamente?
Estou usando o QT no Win32, embora prefira uma solução que seja pelo menos multiplataforma como o QT.