Названные в значительной степени передает всю необходимую информацию, но вот минимальная репродукция:Соединения нитей отключают безблокировочный реализация shared_ptr
#include <atomic>
#include <cstdio>
#include <memory>
int main() {
auto ptr = std::make_shared<int>(0);
bool is_lockless = std::atomic_is_lock_free(&ptr);
printf("shared_ptr is lockless: %d\n", is_lockless);
}
Компиляция это со следующими опциями компилятора производит безблокировочный shared_ptr
реализации:
g++ -std=c++11 -march=native main.cpp
Хотя это не делает:
g++ -std=c++11 -march=native -pthread main.cpp
GCC
версия: 5.3.0
(на Linux, используя libstdc++
), протестирована на нескольких машинах, которые должны иметь необходимые атомарные инструкции для выполнения этой работы.
Есть ли способ принудительно реализовать блокировку (мне нужна бесплатная версия, независимо от производительности)?