Как стать автором
Обновить

Как правильно тестировать конкурентные структуры данных

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров5.9K
Всего голосов 33: ↑33 и ↓0+46
Комментарии3

Комментарии 3

Это не честно, читаешь, мысленно готовишь комментарии, и читая дальше видишь что на все уже есть ответ в следующей итерации :). Классная статья!

Мне кажется, описанный в статье пример реализации, где создаются реальные потоки, которые потом жёстко синхронизируются между собой, является чересчур сложным. Гораздо эффективнее можно было бы эмулировать несколько потоков, используя один реальный поток ОС - переключая стек и указатель потока команд в местах с pause. Такой подход, правда, на чистом Rust не реализовать - нужны будут ассемблерные вставки. Да и подобные (псевдо)потоки придётся отдельным образом создавать.

Ну, начнём с того, что предлагаемым вами образом невозможно протестировать код на наличие проблем, связанных с отсутствием или неверным порядком синхронизирующих операций load/store на архитектурах с weak memory model, т.к. проблемы такого рода будут проявляться только на реальных потоках, одновременно выполняющихся на нескольких физических ядрах. Впрочем, лишний мутекс у автора тоже вносит некоторое искажение в этом плане.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий