Как видно из заголовка: как правильно тестировать и тестировать различные реализации мьютексов в c ++?
По сути, я написал свой собственный класс, похожий на std :: mutex, для проекта, работающего на 2 ядрах, armv7, с целью минимизировать накладные расходы в неоспоримом случае. Сейчас я рассматриваю возможность использования указанного мьютекса в других местах, а также в других архитектурах, но прежде чем я сделаю это, я хотел бы убедиться, что
- это действительно правильно
- нет никаких патологических случаев, в которых он работает намного хуже, чем стандартный std :: mutex.
Очевидно, я написал несколько базовых модульных тестов и микро-тестов, и все, кажется, работает, но в многопоточном коде «кажется, работает» не дает мне большого комфорта.
- Итак, существуют ли какие-либо методы статического или динамического анализа?
- Каковы распространенные подводные камни при написании модульных тестов для классов мьютекса?
- На какие типичные крайние случаи следует обращать внимание (с точки зрения производительности)?
Я использую только стандартные типы библиотек для реализации, которая включает в себя непоследовательные последовательные операции загрузки и хранения на атомарных элементах. Тем не менее, я в основном заинтересован в рекомендациях, не зависящих от реализации, так как я хотел бы использовать тот же тестовый комплект для других реализаций.
Ответы:
Вопрос сложный:
Некоторые источники сложности включают в себя:
источник
Ваша идея очень интересна: эталон соответствия, с которым может быть проверена реализация мьютекса.
К сожалению, насколько я мог видеть, не существует широко известного эталона соответствия для реализации мьютекса. Итак, я полагаю, у вас в руках очень интересная проблема создания предложения для такого эталона соответствия.
И, так как вы участвовали в создании эталонной реализации, вы парень.
Если вы позволите мне сделать предложение, возможно, вы могли бы начать это исследование со стандарта POSIX для потоков в одну сторону и с некоторого изучения теоретической литературы по параллельной обработке, такой как CSP, или «Передача последовательных процессов». Этот тип бумаг обычно имеет дело с классическими параллельными проблемами, такими как Обедающие Философы.
Их реализация может быть интересной частью вашего теста соответствия, я думаю.
источник