Boost.Atomicобеспечивает единичный набор тестов для проверки того, что реализация ведет себя так, как ожидалось:
Fallback_api.cppподтверждает, что обратный к блокировке аспектBoost.Atomicкомпилирует и имеет правильную семантику значений.
native_api.cppпроверяет, что все атомные операции имеют правильную семантику значений (например, «fetch_add» действительно добавляет желаемое значение, возвращая предыдущее). Это грубый «тест на дым», чтобы помочь отсеять наиболее очевидные ошибки (например, переполнение ширины, подписанное / неподписанное расширение).
lockfree.cppподтверждает, чтоBOOST_ATOMIC_*_LOCKFREEМакросы устанавливаются должным образом в соответствии с ожиданиями для данной платформы, и что они совпадают сявляется_lock_freeфункции членоватомныхэкземпляров объектов.
Atomicity.cppпозволяет двум нитям гоняться друг против друга, изменяя общую переменную, проверяя, что операции ведут себя атомарно в зависимости от обстоятельств. По своей природе этот тест обязательно стохастичен, и тест самокалибруется, чтобы дать 99% уверенности в том, что положительный результат указывает на отсутствие ошибки. Этот тест очень полезен на однопроцессорных системах с упреждением.
ordering.cppпозволяет двум потокам соревноваться друг с другом, получая доступ к нескольким общим переменным, проверяя, что операции демонстрируют ожидаемое поведение заказа. По своей природе этот тест обязательно стохастичен, и тест пытается самокалибровать, чтобы дать 99% уверенность в том, что положительный результат указывает на отсутствие ошибки. Это работает только на реальных многопроцессорных (или многоядерных) системах. Он не дает никакого результата на однопроцессорных системах или эмуляторах (из-за отсутствия наблюдаемого переупорядочения даже в случае порядка = расслабления) и сообщит об этом факте.
Адам Вулькевич создал логотип, используемый на странице проектаGitHub. Логотип был взят из егоколлекциилоготипов Boost.
Статья Porting раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 6. Boost.Atomic может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.