memgraph/include/utils/memory/atomic_shared_ptr.hpp
2016-08-10 09:39:02 +01:00

27 lines
517 B
C++

#pragma once
#include <atomic>
#include <memory>
template<class T>
class atomic_shared_ptr final
{
public:
atomic_shared_ptr(std::shared_ptr<T>&& ptr)
: ptr(ptr) {}
std::shared_ptr<T> load()
{
return std::move(std::atomic_load(&ptr));
}
bool compare_exchange_weak(std::shared_ptr<T>& expected,
std::shared_ptr<T> desired)
{
return atomic_compare_exchange_weak(&ptr, &expected, desired);
}
private:
std::shared_ptr<T> ptr;
};