当前位置: 首页> 教育> 幼教 > 本地信息发布平台_dw网页制作多少钱_企业网站开发公司_试分析网站推广和优化的原因

本地信息发布平台_dw网页制作多少钱_企业网站开发公司_试分析网站推广和优化的原因

时间:2025/7/12 9:54:53来源:https://blog.csdn.net/2301_76618920/article/details/142876255 浏览次数:0次
本地信息发布平台_dw网页制作多少钱_企业网站开发公司_试分析网站推广和优化的原因

单例模式线程安全问题--是否加锁

    • 是否加锁问题指什么?
    • 解决多线程并发来带的问题
      • 继承MonoBehaviour的单例模式
      • 不继承MonoBehaviour的单例模式
    • 总结

是否加锁问题指什么?

  1. 如果程序当中存在多线程,我们需要考虑当多个线程同时访问同一个内存空间时出现的问题,如果不加以控制,可能会导致数据出错,我们一般称这种问题为多线程并发问题,指多线程对共享数据的并发访问和操作。
  2. 而一般解决该问题的方式,就是通过C#中的lock关键字进行加锁,我们需要考虑我们的单例模式对象们是否需要加锁(lock)
  3. lock 的原理保证了在任何时刻只有一个线程能够执行被锁保护的代码块,从而防止多个线程同时访问或修改共享资源,确保线程安全

解决多线程并发来带的问题

继承MonoBehaviour的单例模式

可加可不加,但是建议不加。

  1. 因为Unity中的机制是,Unity主线程中处理的一些对象(如GameObject、Transform等等)是不允许被其他多线程修改访问的,会直接报错
  2. 因此我们一般不会通过多线程去访问继承MonoBehaviour的相关对象,所以就不会发生多线程并发问题

不继承MonoBehaviour的单例模式

  1. 基类添加锁
    在这里插入图片描述
  2. 子类也可以用锁
    在这里插入图片描述
  3. 优化
    在这里插入图片描述
/// <summary>
/// 单例模式基类,主要目的是避免代码的冗余,方便实现单例模式的类
/// </summary>
/// <typeparam name="T"></typeparam>
//where约束T必须是class,还有有一个公共的无参构造函数
public abstract class BaseManager<T> where T : class/*,new()*/
{public static T instance;// 用于加锁的对象protected static readonly object lockObj = new object();// 属性的方式public static T Instance{get{if (instance == null){lock (lockObj){// 两次判断空是必要的,当第一个线程拿了钥匙进来后,第二个线程在等待,第一个线程实例化单例对象之后,第二个线程如果没有判断空,就会再new一个单例对象if (instance == null){//instance = new T();// 利用反射得到无参私有的构造函数,来用于对象的实例化Type type = typeof(T);//  BindingFlags.Instance | BindingFlags.NonPublic, //表示成员私有方法//    null,                                         //表示没有绑定对象//    Type.EmptyTypes,                              //表示没有参数//    null);                                        //表示没有参数修饰符ConstructorInfo info = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null);if (info != null){instance = info.Invoke(null) as T;}else{Debug.LogError("没有得到对应的无参构造函数");}}}}return instance;}}}

总结

  1. 项目需要用到多线程才需要加锁,根据需求而定
  2. 继承MonoBehaviour的单例模式不加锁
  3. 不继承MonoBehaviour的单例模式根据项目是否用到多线程判断加不加锁
关键字:本地信息发布平台_dw网页制作多少钱_企业网站开发公司_试分析网站推广和优化的原因

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: