﻿#include "AtomicAcquireRelease.h"

std::atomic<AtomicAcquireRelease*> AtomicAcquireRelease::instance;
std::mutex AtomicAcquireRelease::mutex;

AtomicAcquireRelease* AtomicAcquireRelease::getInstance()
{
	AtomicAcquireRelease* sin = instance.load(std::memory_order_acquire);
	if (!sin)
	{
		std::lock_guard<std::mutex> myLock(mutex);
		sin = instance.load(std::memory_order_relaxed);
		if (!sin)
		{
			sin = new AtomicAcquireRelease();
			instance.store(sin, std::memory_order_release);
		}
	}
	return sin;
}
