Сейчас я читаю книгу C++ Concurrency in Action автора Энтони Уильямс, и существует несколько реализаций структур данных без блокировок. В начале главы о структурах данных без блокировок в книге Энтони пишет:
Это подводит нас к еще одному недостатку кода без блокировок и без ожидания: хотя он может повысить потенциал параллелизма операций над структурой данных и сократить время ожидания отдельного потока, он может снизить общую производительность.
И действительно, я протестировал все реализации стека без блокировок, описанные в книге, в сравнении с реализациями на основе блокировок из одной из предыдущих глав. И кажется, что производительность кода без блокировки всегда ниже, чем у стека на основе блокировки.
В каких случаях структуры данных без блокировки являются более оптимальными и должны быть предпочтительными?