2009-08-19 6 views
5

Je travaille sur le sous-système POSIX de mon projet de système d'exploitation, et j'ai atteint le point où j'aimerais travailler sur le support pthreads. Cependant, je ne suis pas certain de la mesure dans laquelle je devrais les mettre en œuvre.De façon réaliste, quelle fonctionnalité pthreads est généralement utilisée?

Quelle est la fonctionnalité pthreads la plus utilisée? Y a-t-il quelque chose que je pourrais «supprimer» pour l'instant et l'implémenter lorsque nous portons une application qui l'exige? Ma recherche pointe jusqu'à présent sur les opérations de base du thread (créer, joindre, etc ...) - ce qui est assez évident - et le support de mutex. D'un point de vue réaliste, les applications utilisent-elles beaucoup plus que cela?

Je suppose que j'essaie juste de comprendre combien je peux m'en tirer avec une implémentation fonctionnelle.

Répondre

7

Je suggère une couverture de mise en œuvre pthread nus os les fonctions suivantes (avec des préfixes "pthread_" enlevés):

  • opérations de fil de base
    create, exit, join, detach, self, equal, et "attr" support de la possibilité d'assemblage/de désolidarisation
  • intégration de processus
    atfork, kill et sigmask
  • primitives de synchronisation
    cond et mutex fonctions (par défaut uniquement les attributs - rien de fantaisie), en omettant éventuellement cond_timedwait

Jetez un oeil à l'entrée de SUSv6 sur <pthread.h>, qui Je lie de préférence à SUSv7 parce que la version 6 a plus de groupes d'options appelés dans cet en-tête. J'ai composé la liste ci-dessus en supprimant toutes les fonctionnalités optionnelles, puis en supprimant d'autres ensembles de fonctionnalités que mon histoire personnelle et mon observation suggèrent sont inessentielles (par exemple, des données spécifiques au thread) ou inessentielles et dangereuses (par exemple, annulation de threads). :)

+0

Merci.C'est juste le genre d'informations dont j'avais besoin. –

+0

Je me suis retrouvé ici en essayant de comprendre par où commencer, en découvrant les pthreads: c'était vraiment utile, ça m'a aidé à savoir quelles pages de manuel aller en premier! Pas vraiment pertinent à la question originale, mais ... bonne réponse pour * mes * buts non reliés aussi bien! Woo: 3 – ELLIOTTCABLE

5

Vous aurez certainement besoin de prendre en charge les mutex et les variables de condition, car le threading serait inutilisable sans eux, et ils sont largement utilisés. Je suppose que vous pourriez vous en passer sans prendre en charge les sémaphores (qui ne font pas partie des pthreads, je pense), mais je ne peux pas imaginer faire du MT sérieux sans eux.

Il peut être intéressant de regarder le prochain standard C++ proposé support threading et d'implémenter les fonctionnalités dont il a besoin. Si votre système d'exploitation peut prendre en charge de futurs programmes Standard C++, il sera en très bon état.

+0

+1 pour révoquer le downvote (downvoter: quelle que soit la raison?). Merci pour la réponse, et surtout pour le lien C++. Nous prévoyons d'utiliser C++ pour notre API native, donc vous me pointez involontairement vers des informations pertinentes pour un domaine totalement différent. –

+0

@Neil, on pourrait implémenter des sémaphores en termes de 'cond' vars et' mutex'es, pour pallier le manque de support du "sémaphore en temps réel". – pilcrow

+0

@pilcrow en effet, mais il semble un peu dommage que tout le monde ré-implémente une telle fonctionnalité couramment utilisée –

Questions connexes