Название в значительной степени передает всю необходимую информацию, но вот минимальное воспроизведение:
#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++
), проверена на нескольких машинах, которые должны иметь необходимые атомарные инструкции для выполнения этой работы.
Есть ли способ заставить реализацию без блокировки (мне нужна версия без блокировки, независимо от производительности)?