Для модульного тестирования вы можете попробовать стресс-тестирование. Например, для CountDownLatch создайте 25 тестовых потоков, которые одновременно вызывают CountDownLatch::countDown()
, 25 других потоков, которые одновременно вызывают CountDownLatch::getCount()
, и 25 других потоков, которые вызывают CountDownLatch::wait()
. Чтобы сделать вещи более одновременными, используйте барьер или заставьте потоки спать до того же абсолютного времени. Убедитесь, что все потоки завершаются правильно (без взаимоблокировок), присоединяясь ко всем из них. Убедитесь, что CountDownLatch::m_cdlCount
заканчивается на ноль.
Запускать один и тот же тест много раз (в течение разумного периода времени).
Вы можете использовать ту же базовую идею для AtomicCounter.
Возможно, существуют другие методы тестирования многопоточного кода, но это тот, с которым я больше всего знаком.