¿GCC y Clang no admiten subprocesos C11? ¿O hay un truco (o algo para instalar) para obtenerlo? Solo estoy usando Ubuntu 14.04 con los paquetes gcc y clang del repositorio de Ubuntu.
El número de compiladores que admiten completamente c11 y/o threads.h es negativo. 🙁
– esta
5 de abril de 2014 a las 1:34
Los subprocesos C11, cuando finalmente se admitan, serán compatibles con C Biblioteca y no el compilador propiamente dicho. Al menos dos personas están hablando de implementar subprocesos C11 para glibc como un proyecto GSoC este verano. Mientras tanto, es posible que encuentre el pthread.h API sospechosamente similar, aunque con nombres mucho más largos para todo.
– zwol
5 de abril de 2014 a las 1:40
Gran parte de la estandarización está “bendiciendo” las extensiones existentes ampliamente implementadas que se consideran una buena idea, pero la experiencia muestra que el tiempo de espera entre una nueva función que aparece en el estándar C y que los compiladores/bibliotecas la implementan ampliamente es más como “10 años a nunca” que “hasta 3 años”.
– Emmet
5 de abril de 2014 a las 1:58
@Hormiga /yo desliza sin decir palabra la botella de whisky por la barra hacia ti
– zwol
5 de abril de 2014 a las 2:14
Consulte también ¿Alguna biblioteca C implementa subprocesos C11 para GNU/Linux?
–Keith Thompson
8 de enero de 2016 a las 1:49
Shafik Yaghmour
los gcc documento estado C11 indica que no soporta threading, dice:
enhebrar [Optional] | Problema de biblioteca (no implementado)
Como indica el documento, esto no es realmente un gcc o clang problema pero glibc asunto. Como señaló Zack, parece puede haber trabajo en marcha pronto obtener apoyo para esto en glibc pero eso no te ayudará ahora. Puedes usar esta mientras tanto.
9d0a979 Agregar documentación manual para hilos.h
0a07288 nptl: agregar casos de prueba para subprocesos ISO C11
c6dd669 nptl: agregue símbolos de lista de habilidades para subprocesos C11
78d4013 nptl: Añadir subprocesos C11 funciones tss_*
918311a nptl: Agregar subprocesos C11 cnd_* funciones
3c20a67 nptl: Agregar subprocesos C11 funciones call_once
18d59c1 nptl: Añadir subprocesos C11 funciones mtx_*
ce7528f nptl: Agregar subprocesos C11 funciones thrd_*
Se incluirá en 2.28.
Gracias. Entonces, ¿ni GCC ni Clang son compatibles con subprocesos C11? Entonces tendré que regresar a los hilos POSIX 🙁
– lucasarte
5 de abril de 2014 a las 1:50
@lucasart parece ser el caso
– Shafik Yaghmour
5 de abril de 2014 a las 1:55
Ojalá hubiera leído esto ayer. El Bugzilla para enhebrar glibc todavía está abierto (más de 2 años). @lucasart: los hilos POSIX no parecen una regresión; interfaz casi idéntica, “portátil”, y implementado. 🙂 De hecho, compilando contra glibc 2.19 informes __STDC_NO_THREADS__ es 1. Ver también este SO para enlaces adicionales. pthreads es (o C++ 11 std::threadque por cierto depende de -pthread…).
En Ubuntu el encabezado vinculado c11hilos.h provoca un montón de errores. P.ej PTHREAD_MUTEX_TIMED_NP siendo no declarado. La búsqueda dice que debería estar en el incluido pthreads.hpero parece que no lo es.
– Hola angel
6 de julio de 2015 a las 4:47
@Hi-Angel Debe usar el indicador del compilador -std=gnu11 en lugar de -std=c11 o necesita usar un #define _GNU_SOURCE antes de incluir ese archivo c11threads.h.
– nos
15 de enero de 2016 a las 10:29
Funciona en debian 9.13 domingo 28 de febrero de 2021.
– zkutch
28 de febrero de 2021 a las 4:49
jeff hammond
Si bien los subprocesos C11 aún no se han implementado, se han implementado subprocesos C++ 11 y tienen una funcionalidad similar. Por supuesto, C++ 11 puede ser una solución inaceptable, en cuyo caso los comentarios anteriores sobre los subprocesos POSIX son su mejor esperanza.
Los subprocesos se han fusionado con la línea principal Glibc y están disponibles, por ejemplo, en mi Ubuntu 20.04. Desafortunadamente, parece que no tengo ninguna página de manual para la función. Pero esto funciona:
#include <threads.h>
#include <stdio.h>
int hello_from_threading(void *arg) {
printf("Thread about to take a nap...\n");
thrd_sleep(&(struct timespec) { .tv_sec = 3 }, NULL);
printf("Woke up from 3 second slumber\n");
return 42;
}
int main(void) {
thrd_t thread;
thrd_create(&thread, hello_from_threading, NULL);
int res;
printf("A thread was started\n");
thrd_join(thread, &res);
printf("Thread ended, returning %d\n", res);
}
y probándolo:
% gcc threading.c -o threading -lpthread
% ./threading
A thread was started
Thread about to take a nap...
Woke up from 3 second slumber
Thread ended, returning 42
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
El número de compiladores que admiten completamente c11 y/o threads.h es negativo. 🙁
– esta
5 de abril de 2014 a las 1:34
Los subprocesos C11, cuando finalmente se admitan, serán compatibles con C Biblioteca y no el compilador propiamente dicho. Al menos dos personas están hablando de implementar subprocesos C11 para glibc como un proyecto GSoC este verano. Mientras tanto, es posible que encuentre el
pthread.h
API sospechosamente similar, aunque con nombres mucho más largos para todo.– zwol
5 de abril de 2014 a las 1:40
Gran parte de la estandarización está “bendiciendo” las extensiones existentes ampliamente implementadas que se consideran una buena idea, pero la experiencia muestra que el tiempo de espera entre una nueva función que aparece en el estándar C y que los compiladores/bibliotecas la implementan ampliamente es más como “10 años a nunca” que “hasta 3 años”.
– Emmet
5 de abril de 2014 a las 1:58
@Hormiga /yo desliza sin decir palabra la botella de whisky por la barra hacia ti
– zwol
5 de abril de 2014 a las 2:14
Consulte también ¿Alguna biblioteca C implementa subprocesos C11 para GNU/Linux?
–Keith Thompson
8 de enero de 2016 a las 1:49