Sobes.tech
Junior — Middle

Comment assurer une interaction correcte entre les threads lors de l'exécution de tâches parallèles?

sobes.tech IA

Réponse de l'IA

Pour une interaction correcte des threads lors de l'exécution de tâches parallèles en C#, vous pouvez utiliser les approches suivantes :

  • Verrous (lock) — le mot-clé lock permet de limiter l'accès à une section critique du code, afin qu'un seul thread puisse l'exécuter à la fois.

  • Mutex et Semaphore — des mécanismes de synchronisation plus flexibles qui peuvent être utilisés pour gérer l'accès aux ressources entre threads ou processus.

  • Monitor — une classe qui fournit des méthodes pour bloquer et attendre, similaire à lock, mais avec un contrôle accru.

  • Collections concurrentes — par exemple, ConcurrentDictionary, ConcurrentQueue, etc., qui sont sûres pour l'accès multi-thread sans synchronisation supplémentaire.

  • Interlocked — classe pour des opérations atomiques sur des variables (par exemple, incrémentation, décrémentation).

  • async/await et Task Parallel Library (TPL) — permettent d'écrire du code asynchrone et parallèle, minimisant les problèmes de synchronisation.

Exemple d'utilisation de lock :

private readonly object _locker = new object();
private int _counter = 0;

public void Increment()
{
    lock (_locker)
    {
        _counter++;
    }
}

Cette approche garantit que, lors d'appels parallèles à la méthode Increment, la valeur de _counter sera correctement incrémentée sans conditions de course.