Possible en double:
Re-entrant locks in C#récursive/verrouillage imbriqué en C# avec l'instruction lock
Je l'ai regardé ici sur StackOverflow et MSDN, et ne peut pas croire que je ne pourrais pas Je ne trouve pas cette question sur les internets.
Disons que j'ai une classe avec un membre privé auquel je veux accéder dans plusieurs méthodes publiques. Ces méthodes publiques seront appelées par des threads différents, d'où le besoin de synchronisation.
public class MyClass
{
private Object SomeSharedData = new Object();
public void MethodA()
{
lock(SomeSharedData) {
// do something
MethodB();
}
}
public void MethodB()
{
lock(SomeSharedData) {
// do something
}
}
}
Notez que METHODA et MethodB peuvent être appelés par les utilisateurs de cette classe, mais METHODA appelle aussi MethodB, qui se traduit par une condition de verrouillage imbriqué.
Est-ce garanti pour être sûr? En d'autres termes, .NET gère-t-il cela par référence en comptant le verrou, de sorte que lorsque je sors de ces méthodes, le verrou est décrémenté? Ou est-ce que .NET effectue de la magie derrière la scène, en ignorant simplement tous les verrous suivants sur l'objet provenant du même thread?
verrouillage Pour votre information est juste du sucre syntaxique sur Monitor.Enter Monitor.Exit –
@Sergey merci, je pense que je fait J'ai lu ça une fois dans mon livre C# mais je n'ai pas pu le trouver. – Dave
@ M4N ack, je n'ai pas vérifié "re-entrant" :) – Dave