Комментарии 3
Это не честно, читаешь, мысленно готовишь комментарии, и читая дальше видишь что на все уже есть ответ в следующей итерации :). Классная статья!
Мне кажется, описанный в статье пример реализации, где создаются реальные потоки, которые потом жёстко синхронизируются между собой, является чересчур сложным. Гораздо эффективнее можно было бы эмулировать несколько потоков, используя один реальный поток ОС - переключая стек и указатель потока команд в местах с pause. Такой подход, правда, на чистом Rust не реализовать - нужны будут ассемблерные вставки. Да и подобные (псевдо)потоки придётся отдельным образом создавать.
Ну, начнём с того, что предлагаемым вами образом невозможно протестировать код на наличие проблем, связанных с отсутствием или неверным порядком синхронизирующих операций load/store на архитектурах с weak memory model, т.к. проблемы такого рода будут проявляться только на реальных потоках, одновременно выполняющихся на нескольких физических ядрах. Впрочем, лишний мутекс у автора тоже вносит некоторое искажение в этом плане.
Как правильно тестировать конкурентные структуры данных