2017-09-07 1 views
-2

Je pensais à ce qui se passerait si plusieurs goroutines exécutaient select sur un ensemble de canaux où un/certains d'entre eux sont partagés entre eux et pendant que tous attendent, le canal partagé devient disponible.Sélections simultanées sur le même canal partagé

L'exécution va-t-elle gérer ce cas et permettre à un seul goroutine d'accéder au canal et de lire/écrire?

+4

C'est un peu le point des canaux. Ils ne seraient pas très bons pour la synchronisation si vous ne pouviez pas les utiliser simultanément. – JimB

+0

Les utiliser pour la synchronisation est différent du scénario que j'explique ici. Dans mon scénario, deux goroutines essaient de lire à partir du même canal en même temps, en attendant activement en lançant 'select'. Puis, si ce canal a de nouvelles données, l'exécution ne permettra-t-elle à un seul goroutine de lire ces données? – mahdix

+2

Il n'y a pas de différence. Les canaux sont des primitives de communication et de synchronisation, et tous les départs et les arrivées sont des points de synchronisation. – JimB

Répondre