c multithreading c11

glibc linux



¿Alguna biblioteca C implementa subprocesos C11 para GNU/Linux? (7)

Ha habido muchas preguntas sobre los hilos C11 y C11, pero no veo una respuesta definitiva en ninguna parte:

¿Implementa alguna biblioteca C la interfaz de subprocesos C11 que se puede utilizar en GNU / Linux-like? por ejemplo, proporcione el "opcional" <threads.h> y la biblioteca de soporte de hilos como thrd_create() , desde el estándar C11 cerca de p. 376.

Idealmente, me gustaría encontrar una biblioteca que sea común, de código abierto o gratuita, para la arquitectura común / genérica / múltiple (por ejemplo, GNU / Linux, x86_64 o portátil-ish).

Algunos de los enlaces SO más útiles y relevantes:

  • este y este en glibc ;
  • este que está hablando de la norma;
  • este de clang ;
  • esta sobre C11 en general y sobre Windows y otras plataformas;
  • Mucho más sobre los subprocesos en C ++ 11 , pero solo estoy interesado en C11.

Algunas opciones no iniciales para bibliotecas:

No me interesan los subprocesos POSIX (muchas opciones finas), Windows, un IDE, ni C ++ 11 (sé que GNU libstdc++ y LLVM / Clang libc++ proporcionan std::thread C ++ 11, que utiliza -pthread )

¡Gracias!

(volver a editar): la pregunta se volvió a abrir, por lo que se answer a la limpieza.


Finalmente, GNU LIBC 2.28 soporta subprocesos ISO C11.

Supongo que Archlinux, Gentoo y Suse Tumbleweed lo soportarán rápidamente. Más adelante en este año, Fedora y Ubuntu y los otros en 2019 o más tarde.


FreeBSD parece envolver alrededor de los hilos de posix. Lo puedes encontrar aquí: FreeBSD c11 hilos . Pude usar esto en Cygwin. Hasta ahora no hay problemas, pero todavía no lo he usado mucho.


FreeBSD proporciona threads.h desde FreeBSD 10.0 El programa debe estar vinculado a libstdsthreads.


Hmmm, parece que GCC 4.9.0 en realidad proporciona un soporte sustancial para los estándares C11 (al menos desde que se modificaron los documentos web a finales de junio de 2014).

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

Una cuarta versión del estándar C, conocida como C11, se publicó en 2011 como ISO / IEC 9899: 2011. GCC tiene un soporte sustancialmente completo para este estándar, habilitado con -std = c11 o -std = iso9899: 2011. (Mientras estaban en desarrollo, los borradores de esta versión estándar se denominaban C1X).

Y desde https://gcc.gnu.org/gcc-4.9/changes.html

Ahora se admiten los atómicos ISO C11 (el especificador y calificador de tipo atómico y el encabezado). Las selecciones genéricas ISO C11 (palabra clave _Generic) ahora son compatibles. Ahora se admite el almacenamiento local de subprocesos ISO C11 (_Thread_local, similar a GNU C __thread). La compatibilidad con ISO C11 se encuentra ahora en un nivel similar al de la compatibilidad con ISO C99: errores de módulo sustancialmente completos, identificadores extendidos (compatibles, excepto en los casos de esquina cuando se utiliza -fextended-identifiers), problemas de punto flotante (principalmente, pero no completamente relacionados con opcionales Las características de C99 de los Anexos F y G) y los Anexos K opcionales (interfaces de verificación de límites) y L (capacidad de análisis). Una nueva extensión C __auto_type proporciona un subconjunto de la funcionalidad de C ++ 11 auto en GNU C.

Por eso, es difícil decir qué significará todo eso cuando el pedal toque el metal. Una actualización en un entorno a la última versión de GCC 4.9.0 y algunos programas de controladores simples confirmarán cuánto o cuán poco se está implementando.

Espero eso ayude.


PDCLib (la biblioteca estándar de Public Domain C) incluye el soporte completo de AFAICT para threads.h, y no es una envoltura alrededor de pthreads.