希望能坚持写下去
设计模式之单例
using UnityEngine;
using System;
using System.Threading;
// ReSharper disable CheckNamespace
namespace MyFrameWork
{
public abstract class Singleton<T> where T : new()
{
private static T _instance;
private static object _lock = new object();
public static T Instance
{
get
{
if (_instance == null)
{
Monitor.Enter(_lock);
try
{
if (_instance == null)
_instance = Activator.CreateInstance<T>();
}
finally
{
Monitor.Exit(_lock);
}
}
return _instance;
}
}
public virtual void Init()
{
}
}
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
private static T _instance;
private static readonly object LockObject = new object();
public static T Instance
{
get
{
if (_instance == null)
{
Monitor.Enter(LockObject);
_instance = GameObject.FindObjectOfType(typeof (T)) as T;
if (_instance == null)
{
_instance = new GameObject(typeof (T).Name, typeof (T)).GetComponent<T>();
}
Monitor.Exit(LockObject);
}
return _instance;
}
}
public virtual void SetDontDestroyOnLoad(Transform parent)
{
transform.SetParent(parent);
}
}
}
https://msdn.microsoft.com/zh-cn/library/system.threading.monitor(v=vs.110).aspx
http://www.cnblogs.com/chengxingliang/p/3150731.html
http://www.cnblogs.com/lxblog/archive/2013/03/07/2947182.html
线程锁参考上面几个网站