J'ai une bonne affectation de programmation de noyau impliquant une nouvelle méthode de verrouillage de noyau, et mon groupe et moi avons choisi de l'implémenter comme un wrapper autour d'un achèvement. Cependant, la spécification exige que nous renvoyions le nombre de processus notifiés par notre méthode, ce qui impliquait de renvoyer le nombre de processus éveillés par complete_all dans notre implémentation.Existe-t-il un moyen sûr d'obtenir le nombre de tâches en attente d'achèvement?
Comment obtenons-nous ce numéro? Il semblerait qu'il suffise de verrouiller l'achèvement avec son spinlock interne, de compter le nombre d'éléments, puis de le déverrouiller. Cette méthode est préemptive, car nos fonctions sont les seules à avoir accès à l'achèvement en question. Alors, la question est: est-ce que l'achèvement de struct est opaque? Si c'est le cas, serait-il acceptable que, pour faire nos devoirs à temps pour la saison de mi-saison, ignorer cette opacité? Ou, y a-t-il un moyen de le faire sans hacks?
Ne remplit-il pas tous les processus? Je ne suis pas du tout dans la liste des processus, j'appelle simplement complete_all et je le laisse faire. – Alex
Oui complete_all() réveille tous les processus, et ce faisant, il doit savoir combien de "tous" sont, et il pourrait vous le renvoyer. Quelqu'un pourrait dire que c'est un hack, mais je pense que c'est une solution raisonnable, et c'est plus propre que de marcher à nouveau sur la liste juste pour avoir le compte. – mpe