#pragma once

namespace FDK
{
	template<class T>
	public struct Atom
	{
	private:
		T _value;
		CritSec _cs;

	public:
		Atom()
		{
			// 既定のコンストラクタがないとエラーになる。
		}
		Atom( T 初期値 )
		{
			this->_value = 初期値;
		}

		T Get()
		{
			AutoLock l( this->_cs );
			return this->_value;
		}
		void Set( T value )
		{
			AutoLock l( this->_cs );
			this->_value = value;
		}
	};
}
