web-dev-qa-db-fra.com

Est-ce qu'une bibliothèque C implémente des threads C11 pour GNU/Linux?

Il y a eu beaucoup de questions sur les threads C11 et C11, mais je ne vois pas de réponse définitive nulle part: 

Est-ce que la bibliothèque quelconque C implémente l'interface de threading C11 utilisable sous GNU/Linux? Par exemple, fournissez le "code optionnel" <threads.h> et la bibliothèque de support du fil like thrd_create(), à partir de le standard C11 près de p. 376.

Idéalement, j'aimerais rechercher une bibliothèque de type commun, libre ou libre, pour une architecture commune/générique/multi (par exemple, GNU/Linux, x86_64 ou portable-ish).

Quelques-uns des liens les plus utiles et les plus utiles SO:

  • celui-ci et celui-ci sur glibc;
  • celui-ci qui parle de la norme;
  • celui-ci à propos de clang;
  • celui-ci à propos de C11 en général et celui-ci à propos de Windows et d’autres plates-formes;
  • beaucoup plus à propos de C++ 11 threading, mais je suis seulement intéressé par C11.

Quelques options de base pour les bibliothèques:

Je suis pas intéressé par les threads POSIX (nombreuses options fines), Windows, un IDE, ni C++ 11 (je sais que GNU libstdc++ et LLVM/Clang libc++ fournissent C std::thread de ++ 11, qui utilise -pthread)

Merci!


(re) Edit: question ré-ouverte, donc contenu migré pour répondre pour nettoyer.

53
hoc_age

musl now (à partir de sept september 2014) implémente les threads C11!

Selon cette récente publication de la liste de diffusion de musl et une autre conversation sur cette liste de juillet à septembre 2014 , il semble que la bibliothèque musl maintenant (à partir du 2014-09-07) implémente la C11 threads interface, cependant le tableau de comparaison ; au moment de la rédaction de cet article ne reflète pas cela.

Depuis que cette question est ré-ouverte, j'ai déplacé ce contenu à une réponse appropriée.

17
hoc_age

Enfin, GNU LIBC 2.28 prend en charge les threads ISO C11.

Je suppose que Archlinux, Gentoo et Suse Tumbleweed le prendront en charge rapidement. Plus tard dans l'année, Fedora et Ubuntu et les autres en 2019 ou plus tard.

13
Peter

https://github.com/jtsiomb/c11threads est une "implémentation triviale C11 threads.h sur des threads POSIX". contenues dans un seul en-tête.

Hmmm, il semblerait que GCC 4.9.0 apporte un support substantiel aux normes C11 (du moins depuis que les documents Web ont été modifiés vers la fin du mois de juin 2014.

De https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Standards.html

Une quatrième version de la norme C, appelée C11, a été publiée dans 2011 en tant que ISO/IEC 9899: 2011. GCC dispose d’un support substantiellement complet pour cette norme, activée avec -std = c11 ou -std = iso9899: 2011. (Pendant le développement , Les versions préliminaires de cette version standard étaient appelées C1X.)

Et de https://gcc.gnu.org/gcc-4.9/changes.html

Les éléments atomiques ISO C11 (le spécificateur et le qualificateur de type _Atomic et l'en-tête ) Sont maintenant pris en charge. Sélections génériques ISO C11 (_Générique) sont maintenant supportés. Stockage local de threads ISO C11 (_Thread_local, similaire à GNU C __thread) est maintenant pris en charge. ISO C11 le support est maintenant à un niveau de complétude similaire au support ISO C99: bugs modulo substantiellement complets, identificateurs étendus (pris en charge sauf dans les cas où l'angle est utilisé avec -fextended-identifiers), questions à virgule flottante (principalement, mais pas entièrement, les caractéristiques optionnelles C99 des Annexes F et G) et les Annexes facultatives K (Interfaces de vérification des limites) et L (analysabilité). Une nouvelle extension C __auto_type fournit un sous-ensemble des fonctionnalités de C++ 11 auto dans GNU C.

À partir de là, il est difficile de dire ce que tout cela signifiera vraiment lorsque la pédale touchera le métal. Une mise à niveau d'un environnement vers la dernière version GCC 4.9.0 et quelques programmes de pilotes simples permettraient de confirmer son implémentation.

J'espère que ça aide.

4
luis.espinal

FreeBSD fournit threads.h depuis FreeBSD 10.0. Le programme doit être lié à libstdsthreads. 

3
M.K. aka Grisu

PDCLib (la bibliothèque standard de Public Domain C) inclut AFAICT support complet de threads.h, et ce n'est pas un wrapper autour de pthreads.

1
MarcusJ

FreeBSD semble envelopper les fils posix. Vous pouvez le trouver ici: Fils de FreeBSD c11 . J'ai pu utiliser cela dans Cygwin. Jusqu'à présent, aucun problème, mais je ne l'ai pas encore beaucoup utilisé.

0
annoying_squid