Que fait une instruction lock en coulisses ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Que fait une instruction lock en coulisses ?

Message par ForumBot »

Que fait une instruction lock en coulisses ?




Source : Stack Overflow [.net]

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Que fait une instruction lock en coulisses ?

Message par ayi »

L’instruction lock est traduite par C# 3.0 en ceci :


var temp = obj;

Monitor.Enter(temp);

try
{
// body
}
finally
{
Monitor.Exit(temp);
}


En C# 4.0, cela a change et c’est maintenant genere comme suit :


bool lockWasTaken = false;
var temp = obj;
try
{
Monitor.Enter(temp, ref lockWasTaken);
// body
}
finally
{
if (lockWasTaken)
{
Monitor.Exit(temp);
}
}


Vous pouvez trouver plus d’informations sur ce que fait Monitor.Enter ici. Pour citer MSDN :


Utilisez Enter pour acquerir le Monitor sur l’objet passe en parametre. Si un autre thread a execute un Enter sur l’objet mais n’a pas encore execute le Exit correspondant, le thread actuel se bloquera jusqu’a ce que l’autre thread libere l’objet. Il est legal pour le meme thread d’invoquer Enter plus d’une fois sans se bloquer ; cependant, un nombre egal d’appels a Exit doit etre invoque avant que les autres threads en attente sur l’objet ne soient debloques.


La methode Monitor.Enter attendra indefiniment ; elle n’expirera pas.

Répondre

Revenir à « .NET & C# »