Главный вопрос: можно ли сделать порядок выполнения многопоточной программы детерминированным?
Судя по всему, ответ - нет. Тогда что можно сделать, чтобы увеличить вероятность срабатывания теста? Т.к. это, видимо, единственный путь: запускать тест 10+ раз (в зависимости от вероятности срабатывания).
Как я понял, все доступные в системе планировщики работают в kernel-space, и максимум что можно сделать - это управлять приоритетом потока. Можно, конечно, написать свой планировщик с дополнительными системными вызовами, но мне эта задача не представляется простой.
Еще есть yield, но это может помочь далеко не всегда. И управлять этим всем хозяйством будет совсем непросто.