Junior
Quelle est la fonction du mot-clé lock dans le langage C#?
sobes.tech IA
Réponse de l'IA
Le mot-clé lock est utilisé pour synchroniser l'accès aux ressources dans les applications multithread. Il garantit qu'un seul thread peut exécuter le code à l'intérieur du bloc lock à un moment donné.
Principe de fonctionnement :
lockaccepte en argument un objet utilisé comme mutex (moniteur).- Avant d'exécuter le code à l'intérieur du bloc
lock, le thread tente d'obtenir un verrou exclusif sur l'objet spécifié. - Si le verrou est libre, le thread l'obtient et exécute le code.
- Si le verrou est occupé par un autre thread, le thread actuel se bloque (passe en état d'attente) jusqu'à ce que le verrou soit libéré.
- En sortant du bloc
lock(même en cas d'exception), le verrou est automatiquement libéré.
Il est utilisé pour protéger les ressources partagées, telles que les champs de classes, les collections ou d'autres objets auxquels plusieurs threads peuvent accéder simultanément, afin d'éviter les conditions de course et d'assurer l'intégrité des données.
Exemple d'utilisation :
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Objet pour la synchronisation
public void Increment()
{
lock (_lockObject) // Accès exclusif au bloc de code
{
_counter++; // Modification sécurisée de la ressource partagée
}
}
public int GetCounter()
{
lock (_lockObject) // Accès exclusif aussi lors de la lecture
{
return _counter;
}
}
}
Points importants :
- L'objet pour le verrouillage doit être de type référence et, en général, un champ privé (
readonly) pour éviter toute intervention extérieure. - Évitez de bloquer des types comme
string,thisoutypeof(TypeName), car ils peuvent être partagés ou accessibles de l'extérieur, ce qui peut entraîner des blocages mutuels (deadlocks) ou un fonctionnement incorrect. lockest un sucre syntaxique pour utiliser les méthodes de la classeMonitor.