纳金网

标题: C#调用instance() [打印本页]

作者: 王者再临    时间: 2014-7-26 17:49
标题: C#调用instance()
来自网络转载:

学习C#语言时,经常会遇到C#调用instance()试图问题,这里将介绍C#调用instance()试图问题的解决方法。

首先去C#调用instance()试图获得类的实例,instance()成员方法判断该类没有创建唯一实例,于是开始创建实例。由于一些因素,主线程不能马上创建成功,而需要等待一些时间。此时线程1也去调用instance()试图获得该类的实例,因为此时实例还未被主线程成功创建,因此线程1又开始创建新实例。结果是两个线程分别创建了两次实例,对于计数器类来说,就会导致计数的值被重置,与Singleton的初衷违背。解决这个问题的办法是同步。

下面看看本文的计数器的例子的实现:

使用方法一:

方法一中由于实例一开始就被创建,所以instance()方法无需再去判断是否已经存在唯一的实例,而返回该实例,所以不会出现计数器类多次实例化的问题。

使用方法二:

不知道大家有没有注意到instance()方法上方的[MethodImpl(MethodImplOptions.Synchronized)] 语句,他就是同步的要点,他指定了instance()方法同时只能被一个线程使用,这样就避免了线程0调用instance()创建完成实例前线程1就来C#调用instance()试图获得该实例。



作者: hyui    时间: 2014-7-26 19:09
THnkx for share )
作者: yangjianhui6    时间: 2014-7-26 21:12

THnkx for share ))
作者: nobodyland    时间: 2014-7-28 09:36
多线程哪, 很高深




欢迎光临 纳金网 (http://course.narkii.com/club/) Powered by Discuz! X2.5