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:
-
glibc
biblioteca deglibc
no lo hace ; hay un error abierto desde 2012; Hubo propuesta de GSoC pero parece no aceptada ; - El proyecto LLVM / Clang no tiene una biblioteca C;
-
biblioteca de musl no lo hace ;- ¡Ahora sí! Ver edición abajo y answer . - Newlib biblioteca Newlib admite subprocesos ( docs ), pero no utiliza
pthread
ni C11; - uClibc no lo hace;
- esta tabla de comparación , que es dudosa (por ejemplo, no veo evidencia en las fuentes de Musl para el soporte de almacenamiento local de subprocesos C11);
- Algunas publicaciones sobre BSD ,
- Pelles , que aparece cerrado y solo para Windows.
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.
¡Musl ahora (a partir de septiembre de 2014-ish) implementa hilos C11!
De acuerdo con esta reciente publicación de la lista de correo de Musl y otra conversación en esa lista en julio-septiembre de 2014 , parece que la biblioteca de musl ahora (a partir de 2014-09-07) implementa la interfaz de subprocesos C11, aunque la tabla de comparación ; no refleja esto a partir de este escrito.
Dado que esta pregunta se reabrió, moví este contenido a una respuesta adecuada.
https://github.com/jtsiomb/c11threads es una "Implementación de subprocesos C11 triviales sobre subprocesos POSIX". Contenido en un solo encabezado.