Je sais qu'il ya beaucoup de façons de mettre en œuvre un fil modèle singleton en toute sécurité comme (verrouillage Double Check, méthode readonly statique, la méthode de verrouillage) mais j'ai juste essayé ci-dessous le codeSingleton instance
static void Main(string[] args)
{
for (int i = 0; i <= 100; i++)
{
Thread t = new Thread(new ParameterizedThreadStart(doSome));
t.Start(null);
}
Console.ReadLine();
}
private static void doSome(object obj)
{
MyReadOnly obj1 = MyReadOnly.getInstance;
Console.WriteLine(obj1.GetHashCode().ToString());
}
class MyReadOnly
{
private static MyReadOnly instance = new MyReadOnly();
int counter = 0;
// static MyReadOnly()
// {
// } treat is as commented code.
public static MyReadOnly getInstance { get { return instance; } }
private MyReadOnly()
{
Console.WriteLine((++counter).ToString());
}
}
quand je vois la sortie de ce programme, je vois juste un seul objet créé (à cause du même hashcode)
comment prouver que ce code n'est pas thread-safe?
EDIT
suppression constructeur statique qui provoque une certaine confusion
vous ne faites aucun accès concurente donc il n'y a pas de problème –