Middle+
Qu'est-ce qu'un primitive de synchronisation Semaphore?
sobes.tech IA
Réponse de l'IA
Semaphore — c'est un primitive de synchronisation qui contrôle l'accès à un pool limité de ressources. Il maintient un compteur qui détermine combien de threads peuvent accéder simultanément à la ressource.
Opérations principales:
WaitOne(ouWaitAsyncpour le code asynchrone): Diminue le compteur s'il est supérieur à zéro. Si le compteur est zéro, le thread est bloqué jusqu'à ce que le compteur devienne positif (un autre thread appelleRelease).Release: Incrémente le compteur et peut déverrouiller le thread en attente.
Types de Semaphore:
Semaphore: Système (avec ou sans nom), peut être utilisé entre processus.SemaphoreSlim: Implémentation légère, conçue pour une utilisation à l'intérieur d'un processus. Préférée pour la synchronisation intra-processus.
Exemple d'utilisation de SemaphoreSlim:
// semaphoreSlim peut être utilisé pour limiter l'accès simultané à une ressource
// Dans ce cas, 2 threads sont autorisés en même temps
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Attend la libération du sémaphore
await semaphoreSlim.WaitAsync();
try
{
// Accès à la ressource limitée
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} accédant à la ressource");
await Task.Delay(1000); // Simulation de travail avec la ressource
}
finally
{
// Libère le sémaphore
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} libérant la ressource");
semaphoreSlim.Release();
}
}