J'essaie de verrouiller un objet "encadré" dans une application C#, n'est-ce pas possible?Filetage C# - Verrouiller l'objet
class t
{
System.Object t_x = new object();
public t(int p)
{
t_x = p;
}
public void w()
{
lock (t_x)
{
for (int i = 0; i < 4; i++)
{
{
t_x = ((int)t_x) + 1;
Console.WriteLine(t_x);
Thread.Sleep(1000);
}
}
}
}
}
Dans une autre classe, je peux commencer à 2 fils:
Thread b1 = new Thread(new ThreadStart(t1.w));
b1.Start();
Thread b2 = new Thread(new ThreadStart(t1.w));
b2.Start();
Toutefois, la partie n'est pas fermée à clé. Lorsque je verrouille un objet arbitraire (c'est-à-dire créé et non modifié en tant qu'objet a = nouvel objet()), il se verrouille correctement. Est-ce que l'opération de boxe "dépromote" mon Object?
Pourquoi voudriez-vous réattribuer l'objet de verrouillage dans un bloc de verrouillage? Cela va à l'encontre du but - puisque tout le point de la synchronisation est d'éviter que les threads diff ne se piétinent l'un l'autre pour une ressource "partagée". – Gishu
Je pense que la réponse a accepté ce n'est pas le bon –
Il semble y avoir un abus de langage récurrent chez les moins expérimentés essayant le filetage .Net que l'instruction lock verrouille réellement ou protège l'objet sur lequel le verrou est appelé. Ils semblent manquer le fait que l'objet est vraiment une clé pour un bloc de code verrouillé, la section critique. –