Alors, si tu fais référence au code de retour : arf, j'avais oublié de le forcer à 0. Corrigé.
En revanche, si tu fais référence à l'implémentation, alors non, la mienne est bien correcte.
Ce qui se passe, c'est qu'il y a une erreur dans la page de manuel française de sched_yield(). Les spécifications ne précisent nullement qu'un nouveau thread sera exécuté (c'est même impossible dans certains cas, par exemple si l'appelant est le seul thread actif ou activable du système), juste qu'il pourra l'être.
De plus, les notions de multitâche et d'exécution parallèle ne sont pas spécifiées, et les choix d'ordonnancement sont laissés à la discrétion de l'implémentation. C'en est même à tel point que les auteurs des spécifications ont dû rajouter une note pour interdire l'implémentation-gag du fork() monothreadé (1).
Par conséquent, lorsqu'un thread appelle sched_yield(), l'implémentation doit le placer parmi les threads ayant fini leur temps d'exécution, puis exécuter un thread activable de son choix. En particulier, elle peut fort bien décider de relancer immédiatement cet appelant. Tout ce que fait mon implémentation, c'est qu'elle choisit de le ré-exécuter à chaque fois. Là aussi, c'est clairement une implémentation-gag, mais c'est un comportement possible, et un choix qui ne viole aucune spécification.
(1) Le fork() monothreadé consiste à choisir, comme politique d'ordonnancement, que lors d'un fork(), le fils s'exécute immédiatement et que le père ne sera exécuté qu'une fois que le fils se sera terminé. Cela aboutit à un UNIX ne comportant qu'une seule thread avec empilement et dépilement des divers processus, et aucun multitâche... Mais cela ne viole pas formellement les spécifications.
Les auteurs de ces spécifications ont ajouté une note pour préciser que ce genre d'implémentation-gag serait regardée comme un jouet et non un véritable système d'exploitation. Mais cela illustre bien le niveau de liberté laissé aux implémentations quant à l'ordonnancement.
[^] # Re: Vu dans les Manux Facts
Posté par Emmanuel Colbus . En réponse au journal Premiers pas avec Manux. Évalué à 10.
Alors, si tu fais référence au code de retour : arf, j'avais oublié de le forcer à 0. Corrigé.
En revanche, si tu fais référence à l'implémentation, alors non, la mienne est bien correcte.
Ce qui se passe, c'est qu'il y a une erreur dans la page de manuel française de sched_yield(). Les spécifications ne précisent nullement qu'un nouveau thread sera exécuté (c'est même impossible dans certains cas, par exemple si l'appelant est le seul thread actif ou activable du système), juste qu'il pourra l'être.
De plus, les notions de multitâche et d'exécution parallèle ne sont pas spécifiées, et les choix d'ordonnancement sont laissés à la discrétion de l'implémentation. C'en est même à tel point que les auteurs des spécifications ont dû rajouter une note pour interdire l'implémentation-gag du fork() monothreadé (1).
Par conséquent, lorsqu'un thread appelle sched_yield(), l'implémentation doit le placer parmi les threads ayant fini leur temps d'exécution, puis exécuter un thread activable de son choix. En particulier, elle peut fort bien décider de relancer immédiatement cet appelant. Tout ce que fait mon implémentation, c'est qu'elle choisit de le ré-exécuter à chaque fois. Là aussi, c'est clairement une implémentation-gag, mais c'est un comportement possible, et un choix qui ne viole aucune spécification.
(1) Le fork() monothreadé consiste à choisir, comme politique d'ordonnancement, que lors d'un fork(), le fils s'exécute immédiatement et que le père ne sera exécuté qu'une fois que le fils se sera terminé. Cela aboutit à un UNIX ne comportant qu'une seule thread avec empilement et dépilement des divers processus, et aucun multitâche... Mais cela ne viole pas formellement les spécifications.
Les auteurs de ces spécifications ont ajouté une note pour préciser que ce genre d'implémentation-gag serait regardée comme un jouet et non un véritable système d'exploitation. Mais cela illustre bien le niveau de liberté laissé aux implémentations quant à l'ordonnancement.