
Guardar
El nuevo estándar C11 proporciona soporte para Multi-Threading.
Mis preguntas son un poco diversificadas pero definitivamente respondibles.
He echado un vistazo al C11. n1570 sequía.
Dice:
soporte para múltiples subprocesos de ejecución, incluido un modelo de secuenciación de memoria mejorado, objetos atómicos y almacenamiento local de subprocesos (<stdatomic.h>
y <threads.h>
)
Cuál es el Modelo de secuenciación de memoria mejorado? ¿Cómo/Qué cambia del Estándar c99?
En lugar de solo citas del estándar, apreciaré si alguien profundiza en ellas e intenta explicar la semántica involucrada.
Según tengo entendido, C11 proporciona soporte para:
- Creación y gestión de hilos
- exclusión mutua
- Variables condicionales
- Almacenamiento específico de hilos y
- Objetos atómicos
Espero no haberme perdido nada?
Dado que ahora la biblioteca estándar en sí proporciona (proporcionará) todas las funcionalidades necesarias para subprocesos múltiples, ¿no habría necesidad de POSIX y tales bibliotecas (para compatibilidad con subprocesos múltiples) en el futuro?
Por último, ¿qué compiladores brindan soporte para las funciones mencionadas anteriormente? ¿Hay referencias en cuanto a los plazos en los que se admitirán?
Recuerdo que para C ++ 11 había un enlace para soporte y características del compilador, ¿quizás algo así?

janneb
Primero, no descarte C++11. El trabajo de concurrencia para los nuevos estándares se realizó bajo el paraguas de C++11 y luego se importó a C11 con el objetivo explícito de ser compatible. Si bien hay algunas diferencias sintácticas (por ejemplo, debido a que C simple no tiene plantillas o sobrecarga de funciones), semánticamente son idénticas por diseño. Para obtener “pruebas” de esto, se pueden consultar los documentos del WG14. P.ej:
y referencias en el mismo. Se puede encontrar más en
Abrir sitio web estándar
Ahora, vamos a tus preguntas:
¿Qué es el modelo de secuenciación de memoria mejorada?
La respuesta obvia es que se ha cambiado para tener en cuenta varios subprocesos y cómo interactúan. Para obtener una respuesta un poco más larga, consulte C++ 11 introdujo un modelo de memoria estandarizado. ¿Qué significa? ¿Y cómo afectará a la programación en C++? eso ya fue mencionado en los comentarios. Para una comprensión profunda, una respuesta de stackoverflow quizás no sea el lugar correcto (¡mucho menos una pregunta con varias subpreguntas!). Pero por suerte Hans Boehm mantiene una página muy buena con enlaces interesantes para leer más (nuevamente, tenga en cuenta que los modelos de memoria C11 y C++11 son semánticamente idénticos)
Espero no haberme perdido nada?
Junto con el modelo de memoria, su lista parece cubrir las adiciones de concurrencia en C11. Para otros cambios, wikipedia tiene una lista; de la parte superior de mi cabeza no puedo encontrar nada que la lista de wikipedia haya pasado por alto.
Dado que ahora la biblioteca estándar en sí proporciona (proporcionará) todas las funcionalidades necesarias para subprocesos múltiples, ¿no habría necesidad de POSIX y tales bibliotecas (para compatibilidad con subprocesos múltiples) en el futuro?
Sí, habrá una necesidad de ellos. En primer lugar, nadie va a reescribir todo el código existente que utiliza las diversas API de subprocesos existentes. En segundo lugar, la biblioteca de subprocesos de C(++)11 es/lo más probable es que se implemente como un envoltorio alrededor de las diversas bibliotecas de subprocesos nativos; Diablos, incluso hay una forma documentada de recuperar un puntero al subproceso nativo subyacente, en caso de que uno necesite hacer algo más allá de lo que admite la biblioteca de subprocesos C (++). Piense en la biblioteca de subprocesos C(++)11 más como un contenedor de mínimo común denominador portátil alrededor de las diversas bibliotecas de subprocesos nativos.
Por último, ¿qué compiladores brindan soporte para las funciones mencionadas anteriormente? ¿Hay referencias en cuanto a los plazos en los que se admitirán? Recuerdo que para C ++ 11 había un enlace para soporte y características del compilador, ¿quizás algo así?
No he visto ninguna lista detallada, no parece haber tanto revuelo en torno a C11 en comparación con C++11. Hay un breve aviso para el próximo GCC 4.7 aquí: http://gcc.gnu.org/gcc-4.7/cambios.html . Para el soporte de concurrencia, se puede comprobar el soporte de concurrencia en la página de estado de C++11 aquí: http://gcc.gnu.org/proyectos/cxx0x.html . También hay algunas notas sobre el estado actual y los planes para GCC en http://gcc.gnu.org/wiki/Atomic (según esa página, stdatomic.h está disponible). Para otros compiladores, hay una buena lista del estado de C++ 11 para varios compiladores aquí http://www.aristeia.com/C++11/C++11FeatureAvailability.htm . Desde los enlaces allí, se puede verificar el estado del soporte de concurrencia y, suponiendo que el proveedor en cuestión planea admitir C11, es probable que el soporte de concurrencia de C11 esté aproximadamente al mismo nivel.

Agnius Vasiliauskas
Con respecto a What compilers provide support for the above mentioned features?
Pelles C apoya C11 <threads.h>
. Creación de hilos con Pelles C
ejemplo de compilador:
#include <stdio.h>
#include <threads.h>
#define NUM_THREADS 7
static int threadData[NUM_THREADS];
int threadFunction(void * data) {
printf("%d-th thread up\n", *(int*)data);
return 0;
}
int main(void) {
thrd_t threadId[NUM_THREADS];
// init thread data
for (int i=0; i < NUM_THREADS; ++i)
threadData[i] = i;
// start NUM_THREADS amount of threads
for (int i=0; i < NUM_THREADS; ++i) {
if (thrd_create(threadId+i, threadFunction, threadData+i) != thrd_success) {
printf("%d-th thread create error\n", i);
return 0;
}
}
// wait until all threads terminates
for (int i=0; i < NUM_THREADS; ++i)
thrd_join(threadId[i], NULL);
return 0;
}
EDITAR: Se eliminó el problema de datos compartidos del subproceso y el problema de salir de main()
antes de que terminen todos los subprocesos.

Jens Gustedt
Janneb ya ha dado muchas explicaciones. Para tus últimas preguntas
Por último, ¿qué compiladores brindan soporte para las funciones mencionadas anteriormente? ¿Hay referencias en cuanto a los plazos en los que se admitirán?
La familia de compiladores gcc (clang, icc, opencc) admite la mayoría de la semántica que requiere el nuevo estándar, solo hay diferencias sintácticas. (sonido incluso implementos _Generic
en la última versión).
Para P99 he escrito macros contenedoras que asignan la mayoría de las características a algo que ya es sintaxis C11, o se acerca a ella (para emular _Generic
).
Así que si tienes uno de estos compiladores y están en un sistema POSIX, puede comenzar a usar mucho (la mayoría) de C11 inmediatamente: subprocesos con todos los tipos mtx_h
etc, atómicos con _Atomic
escriba macros genéricas (la sintaxis es ligeramente diferente de C11), _Static_assert
y las cosas de alineación.
Ver también: stackoverflow.com/questions/4938258/…
– bdonlan
16 de enero de 2012 a las 6:17
@bdonlan: La pregunta es sobre c11 y no sobre c++ 11. Ambos son diferentes. Los dos enlaces que proporcionaste son para c++ 11 y no sobre c11.
– Alok Guardar
16 de enero de 2012 a las 6:19
Estoy votando cerca (‘duplicado exacto’) porque su primera pregunta (Sobre el modelo de secuenciación) ya ha sido respondida. Es difícil responder preguntas que contienen varias preguntas, porque es posible que alguien solo conozca una parte de su pregunta; por lo tanto, su respuesta nunca se puede aceptar, porque no responde a la pregunta completa y es posible que nunca haya una respuesta aceptada. Divida su pregunta y elimine la parte duplicada exacta (o indique por qué es diferente de las preguntas que vinculé).
– bdonlan
16 de enero de 2012 a las 6:25
… oh, ahora veo que se trata de C11, no de C++11. ¡Olvidalo entonces! Sin embargo, aún recomiendo que divida su pregunta: tiene una pregunta sobre 1) ¿Qué es un modelo de secuenciación de memoria? (posiblemente respondido por el de C++ 11, la respuesta será similar con una sintaxis diferente) 2) ¿ES esto todo lo que proporciona C11? 3) ¿Todavía se necesitan pthreads, etc.? 4) ¿Cómo está progresando el soporte del compilador C11?
– bdonlan
16 de enero de 2012 a las 6:25
@bdonlan: Yo creo
1-3
Las Q están relacionadas lógicamente y deben agruparse. Una respuesta para cualquiera de las 3 tocaría las 3. Tal vez,4
podría ser una Q separada, pero no me sentí justificado al comenzar una Q solo por eso.– Alok Guardar
16 de enero de 2012 a las 6:31