Support du Multi-thread en c11
La nouvelle C11 norme fournit un support pour le Multi-Threading.
Mes Questions sont un peu diversifié mais certainement responsable.
J'ai eu un coup d'oeil à la C11 n1570 projet.
Il dit:
prise en charge de plusieurs threads d'exécution, y compris une amélioration de la mémoire de séquençage
modèle atomique objets, et le fil de stockage local (<stdatomic.h>
et<threads.h>
)
Quel est le Amélioration de la mémoire de séquençage modèle? Comment/Ce qui change à partir du Standard c99?
Plutôt que de simplement des devis de la norme, je vous en seront reconnaissants si quelqu'un plonge plus profondément en eux et tente d'expliquer la sémantique impliqués.
Que je comprends, C11 fournit un support pour:
- Fil de la création et de la Gestion
- Mutex
- Variables Conditionnelles
- Fil de stockage Spécifique &
- Atomique Objets
J'espère que je n'ai pas oublié quelque chose?
Depuis maintenant de la bibliothèque Standard fournit elle-même(présentera toutes les fonctionnalités nécessaires pour le Multi-Threading, il n'y aurait pas besoin de POSIX et des bibliothèques(pour le support du Multi-thread) dans l'avenir?
Enfin, les compilateurs de fournir un soutien pour les caractéristiques mentionnées ci-dessus? Il y a aucune références du calendrier lorsque ceux-ci seront pris en charge?
Je me souviens de C++11, il y a un lien pour la prise en charge du compilateur et de fonctionnalités, peut-être quelque chose comme ça?
- Voir aussi: stackoverflow.com/questions/4938258/...
- La question est sur le c11 et pas du c++11.Les deux sont différents.Les deux liens vous sont fournis pour le c++11 et pas c11.duh?
- Je suis proche de vote ('copie exacte) parce que votre première question (à Propos de la séquence modèle) a déjà été répondu. Il est difficile de répondre à des questions qui contiennent de multiples questions, parce que quelqu'un peut ne connaissons qu'une partie de votre question, la réponse peut donc jamais être accepté, car il ne répond pas à l'ensemble de la question, et il ne peut jamais être accepté de répondre. Veuillez diviser votre question, et de supprimer la copie exacte de la pièce (ou indiquer pourquoi il est différent de l'questions que j'ai mis en lien).
- ... oh, je vois que c'est sur le C11, pas du C++11. Tant pis alors! Je recommande toujours que vous divisez votre question toutefois vous avez une question sur: 1) qu'est Ce qu'un mémoire de séquençage de modèle? (éventuellement répondu par le C++11, la réponse sera similaire avec une syntaxe différente) 2) EST-ce tout ce qui C11 offre? 3) Est-pthreads etc-il encore nécessaire? 4) Comment est-C11 prise en charge du compilateur en progression?
- Je crois
1-3
de Q sont logiquement liées et doivent être regroupées.Une réponse pour l'une des 3 touchent à tous les 3 d'entre eux.Peut-être,4
pourrait être séparé Q mais je ne me sentais pas justifié de commencer un Q juste pour ça. - 1 est une question très technique qui auraient besoin d'une réponse longue comme celle du C++11 question j'ai relié; 3-que quelqu'un avec moins de profondeur dans la connaissance de l'Api pourraient répondre. 2 nécessite moins de connaissances spécifiques. C'est à vous si vous voulez couper ou pas, mais compliqué multi-partie des questions ont tendance à obtenir de moins en moins de réponses, et des questions ciblées seront plus utiles pour les gens dans le futur la recherche de quelque chose de spécifique.
- Je comprends votre préoccupation.Cependant,je vais le laisser rester comme tel pour le moment, Jusqu'à ce qu'au moins certains d'expositions de la réponse,si theres aucun qui touchait à eux je vais vous séparer.
- Vote pour fermer trop large: plusieurs questions en une seule. La mise en œuvre du statut demandé à: stackoverflow.com/questions/8741299/... et stackoverflow.com/questions/24557728/...
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne pas écrire hors de C++11. La simultanéité de travail pour les nouvelles normes s'est faite sous le C++11 parapluie, puis importés dans C11 avec l'objectif explicite d'être compatible. Bien qu'il existe certaines différences syntaxiques (par exemple, en raison de la plaine C de ne pas avoir de modèles ou de surcharge de fonctions), sémantiquement, ils sont identiques de par leur conception. Pour "preuve" de ce, on peut vérifier le WG14 papiers. E. g:
et les références qui y sont. Plus peut être trouvé à
Ouvrir Std Site Web
Maintenant, à vos questions:
Qu'est-ce que l'Amélioration de la mémoire de séquençage modèle?
La réponse la plus évidente est qu'il a été modifié afin de prendre en compte plusieurs threads et comment ils interagissent. Pour la réponse un peu plus longue, voir C++11 introduit un standardisés modèle de mémoire. Ça veut dire quoi? Et comment est-ce que ça va affecter la programmation en C++? qui a déjà été mentionné dans les commentaires. Pour une compréhension en profondeur, un stackoverflow réponse est peut-être pas le bon endroit (encore moins d'une question avec plusieurs subquestions!). Mais heureusement Hans Boehm maintient une très bonne page avec des liens intéressants pour poursuivre la lecture (encore une fois, gardez à l'esprit que le C11 et C++11 modèles de mémoire sont sémantiquement identiques)
J'espère que je n'ai pas oublié quelque chose?
Avec le modèle de mémoire, votre liste semble porter sur la simultanéité des ajouts en C11. Pour les autres modifications, wikipedia a une liste; du haut de ma tête que je ne peux pas trouver quelque chose de wikipédia, liste de a raté.
Depuis maintenant de la bibliothèque Standard fournit elle-même(présentera toutes les fonctionnalités nécessaires pour le Multi-Threading, il n'y aurait pas besoin de POSIX et des bibliothèques(pour le support du Multi-thread) dans l'avenir?
Oui, il y aura un besoin pour eux. Tout d'abord, personne ne va réécrire tout le code existant qui utilise les différents thread existant de l'API. Deuxièmement, le C(++)11 bibliothèque de threads est/sera probablement mis en œuvre comme un wrapper autour de différents thread natif bibliothèques; heck, il ya même manière documentée pour récupérer un pointeur vers le sous-jacent thread natif, dans le cas où l'on doit faire quelque chose au-delà de ce que le C(++) bibliothèque de threads prend en charge. Penser le C(++)11 bibliothèque de threads plus comme un portable, plus petit dénominateur commun wrapper autour des différents thread natif bibliothèques.
Enfin, les compilateurs de fournir un soutien pour les caractéristiques mentionnées ci-dessus? Il y a aucune références du calendrier lorsque ceux-ci seront pris en charge? Je me souviens de C++11, il y a un lien pour la prise en charge du compilateur et de fonctionnalités, peut-être quelque chose comme ça?
Je n'ai pas vu de liste détaillée, il ne semble pas être autant de buzz autour de C11 par rapport à C++11. Il y a un court préavis pour la prochaine GCC 4.7 ici: http://gcc.gnu.org/gcc-4.7/changes.html . Pour la simultanéité de soutien, on peut vérifier le support de la simultanéité dans le C++11 le statut de la page ici: http://gcc.gnu.org/projects/cxx0x.html . Il y a aussi quelques notes sur l'état actuel et les plans pour la GCC à http://gcc.gnu.org/wiki/Atomic (selon cette page, stdatomic.h est disponible). Pour d'autres compilateurs, il y a une belle liste de C++11 état de la situation pour les différents compilateurs ici http://www.aristeia.com/C++11/C++11FeatureAvailability.htm . À partir de ces liens là on peut vérifier l'état de la simultanéité de soutien, et en supposant que le fournisseur en question des plans de soutien C11, le C11 simultanéité de soutien est alors susceptible d'être à peu près au même niveau.
xthreads.h
(vous trouverez dans lethr
dossier dans le répertoire include). Il est presque identique àthreads.h
. Mais je crois que cela a été créé uniquement pris en charge par le C++ threads mise en œuvre. Encore, il fonctionne très bien.Concernant
What compilers provide support for the above mentioned features?
Pelles C prend en charge C11
<threads.h>
. Création de threads avecPelles C
compilateur exemple:MODIFIER: Éliminé fil de données partagée problème et le problème de la sortie de
main()
plus tôt que tous les fils se termine.Janneb a déjà donné beaucoup d'explications. Pour vos dernières questions
La famille des compilateurs gcc (bruit, de la cpi, opencc) prend en charge la plupart de la sémantique que la nouvelle norme exige, il y a seulement des différences syntaxiques. (clang même implémente
_Generic
dans la dernière version.)Pour P99 j'ai écrit wrapper macros que la carte de la plupart des fonctions pour quelque chose qui est déjà C11 de syntaxe, d'ou vient près de lui (pour l'émulation de
_Generic
).Donc, si vous avez un de ces compilateurs et sont sur un système POSIX, vous pouvez commencer à utiliser beaucoup (la plupart) de C11 immédiatement: les discussions avec tous les types de
mtx_h
etc, atomics avec_Atomic
, type générique macros (la syntaxe est légèrement différente de C11),_Static_assert
et l'alignement des trucs.mtx_t
,cond_t
et des trucs comme ça.__GNUC__
macro à une certaine valeur.