Я сейчас читаю C++ Concurrency in Action книга Anthony Williams и существует несколько реализаций структур без блокировки. В прямом направлении главы о блокировках свободных структур данных в книге Энтони пишут:В каких обстоятельствах блокировка данных с данными быстрее, чем блокировка?
Это подводит нас к другой нижней стороне коды безблокировочной и ждать бесплатно: хотя это может увеличить потенциал для параллельности операций на структуру данных и сократить время ожидания отдельного потока, это может значительно снизить общую производительность.
И действительно, я протестировал все блокированные стековые реализации, описанные в книге, против реализации на основе блокировки из одной из предыдущих разделов. И кажется, что производительность кода без блокировки всегда ниже, чем стек, основанный на блокировке.
В каких обстоятельствах блокировка свободной структуры данных является более оптимальной и должна быть предпочтительной?
Какое количество данных? Как долго блокировочные версии были заблокированы? – doctorlove
"должно быть предпочтительнее?" Должно быть очень сильное слово – UKMonkey
Мне нравятся блокированные структуры данных, потому что они помогают избежать взаимных блокировок мьютексов. Они будут медленнее, когда будет много споров, как с прямыми замками. –