web-dev-qa-db-fra.com

Les meilleures pratiques ne sont pas pour caca ... mais le sondage ne se passe-t-il pas à l'intérieur de toute façon quand un fil d'appel attend ()?

Disons que nous avons du fil qui veut vérifier quand un autre thread est terminé sa tâche. J'ai lu que nous devrions appeler une fonction de type WAIT () qui rendra cette attente de thread jusqu'à ce qu'elle reçoive une notification que l'autre thread est terminée. Et que c'est bien parce que cela signifie que nous n'effectuons pas de vote coûteux.

Mais le sondage n'arrive-t-il pas en interne à un niveau inférieur de toute façon? C'est à dire. Si nous faisons le thread Wait () n'est-ce pas le sondage Kernal effectuant de toute façon pour vérifier lorsque l'autre thread est terminé de manière à notifier le premier fil?

Je présume que je manque sur quelque chose ici, quelqu'un peut-il éclairer moi?

13
csss

Le système d'exploitation offre certaines primitives pour ce type de communication interprocessée qui ne nécessitent pas de vote.

Si le processus A attend sur Mutex M, le système d'exploitation sait que A ne peut pas être exécuté et la met de côté dans un seau de processus attendant que quelque chose se produise. Lorsque le processus détenant m le libère, le système d'exploitation examine la liste des processus qui l'attendent. Le premier processus sur la liste, peut-être un, est retiré du godet inactif et mettez-le sur la file d'attente. La prochaine fois qu'un coup de temps a une tranche de temps, l'attente () qu'elle a appelée reviendra et que le programme continue.

28
Blrfl