Singleton et Multithreading
En lien avec mon topic Conception Singleton et Multithreading
Voici une implémentation théorique en C# qui reprend l'idée de mehdiing :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
public class Singleton
{
static private Singleton _instance;
static private bool _verrou=false;
static private int _maxWaitingDuringTime=20000;
static public int MaxWaitingDuringTime
{
get{return _maxWaitingDuringTime;}
set{_maxWaitingDuringTime=value;}
}
static Singleton()
{
_instance=new Singleton();
}
private Singleton()
{
}
public static Singleton GetInstance()
{
int waitingDuringTime=0;
int baseWaitingLoop=100;
int iLoop=0;
while(true){
iLoop++;
//Console.WriteLine(Thread.CurrentThread.Name+": Waiting for Singleton");
Thread.Sleep(baseWaitingLoop*iLoop);
waitingDuringTime+=baseWaitingLoop*iLoop;
lock(_instance)
{
if(!_verrou) break;
}
if(waitingDuringTime>MaxWaitingDuringTime) throw new ThreadStateException("Waiting access for "+waitingDuringTime+" ms while max allowed is "+MaxWaitingDuringTime);
}
lock(_instance)
{
_verrou=true;
}
return _instance;
}
public static void Release(ref Singleton p_instance)
{
lock(_instance)
{
_verrou=false;
p_instance=null;
}
}
} |
Qu'en pensez-vous ?