Sigo escuchando acerca de la programación simultánea en todas partes. ¿Pueden arrojar algo de luz sobre lo que es y cómo los nuevos estándares C++ facilitan hacer lo mismo?Programación concurrente C++?
Respuesta
La concurrencia se trata de su código haciendo varias cosas al mismo tiempo. Esto se hace típicamente con "hilos" explícitos, pero hay otras posibilidades. Por ejemplo, si usa directivas OpenMP en su código, entonces un compilador que admita OpenMP generará automáticamente subprocesos para usted.
El hilo es la abreviatura de "hilo de ejecución". En un programa de C++ de subproceso único, la ejecución comienza en main() y luego continúa de forma secuencial. En un programa de subprocesos múltiples, el primer subproceso comienza en main, pero la aplicación puede iniciar subprocesos adicionales que comienzan en una función especificada por el usuario. Estos se ejecutan al mismo tiempo o en paralelo con el hilo original.
en hilos 0x C++ se inician mediante la clase std::thread
:
void my_function()
{
// do stuff
}
std::thread my_thread(my_function); // run my_function in its own thread
El nuevo estándar C++ 0x también soporta:
- valores atómicos y operaciones con la plantilla
std::atomic<>
clase, - mutex de protección de datos (
std::mutex
,std::recursive_mutex
, etc.) - clases bloqueo fo r facilidad de gestión de toda la vida de bloqueo (
std::lock_guard<>
,std::unique_lock<>
) std::lock
ystd::try_lock
funciones para gestionar la adquisición de múltiples cerraduras, al mismo tiempo sin el riesgo de estancamiento- variables de condición para aliviar la espera de un evento (
std::condition_variable
,std::condition_variable_any
) - futuros , promesas y tareas empaquetadas para simplificar el paso de datos entre hilos y esperar que un valor esté listo. Esto aborda la clásica pregunta "¿cómo devuelvo un valor de un hilo?".
- inicialización flujos seguros de objetos estática local
- la
thread_local
palabra clave para declarar los datos de subproceso local
di una descripción más detallada de la nueva biblioteca de subprocesos C++ 0x en mi artículo sobre DevX. com: Simpler Multithreading in C++0x
escribo sobre multihilo y concurrencia en C++ en my blog. También estoy escribiendo un libro sobre el tema: C++ Concurrency in Action.
¿Se puede agregar algo ahora que C++ 11 está disponible? ¿Me imagino que ahora podemos usar la semántica de movimiento? – Damian
Sí, puede usar la semántica de movimiento con 'std :: thread' y' std :: async'. –
Quizás este video podría ayudar a arrojar algo de luz para ti :-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/
concurrencia es tener múltiples hilos de ejecución para un proceso dado. A partir de hoy, C++ no lo admite directamente. Sin embargo, existen varias bibliotecas que vincularán una función determinada con un nuevo hilo de ejecución. El estándar Unix es la biblioteca pthreads.
El estándar Posix (no Unix) –
Cuando dices "cómo los nuevos estándares C++ facilitan" la programación concurrente, supongo que estás hablando de la próxima (?) Versión C++ 09 estándar.
El nuevo estándar tal y como está actualmente en fase de proyecto es compatible con los siguientes elementos que ayudan a la programación concurrente:
- tipos atómicos y direcciones
- una clase de hilo
- almacenamiento thread_local (que se acaba de agregar en el proyecto de norma hace unos meses)
- exclusión mutua (clases mutex)
- variables de condición - esto es particularmente bueno para Windows, ya que Las variables de iones son difíciles de implementar correctamente en Win32. Esto significa que eventualmente Microsoft debería proporcionar soporte para las variables de condición al menos en el tiempo de ejecución de MSVC++, por lo que será fácil obtener la semántica de la variable de condición correcta en WIn32.
¿Alguien ha escrito un buen resumen sobre estas características todavía? –
Creo que están muy basados en boost :: thread, por lo que no debería haber mucha diferencia entre esa documentación y el nuevo estándar. – gbjbaanb
Mi levemente diversa, específico para las futuras direcciones de paradigmas de programación:
concurrencia se trata de escribir su programa de tal manera que pueda estar haciendo varias cosas a la vez si el hardware lo soporta. Actualmente, la mayoría de los lenguajes tienen mecanismos bastante pesados y complicados para permitir que el programador especifique esto (por ejemplo: hilos con sincronización manual, directivas de preprocesador OpenMP, etc.).
A medida que mejora el hardware, mejorará horizontalmente (más núcleos) en lugar de verticalmente (núcleo único más rápido). Esto significa que las aplicaciones necesitarán tener una "concurrencia latente" para escalar con hardware "más rápido". Actualmente, los idiomas están tratando de evolucionar para respaldar mejor esto, para estar en la posición de mejor lenguaje para el desarrollo futuro.
C++ 0x está agregando más soporte incorporado para los "viejos" métodos de programación de simultaneidad. Varios proveedores de compiladores están agregando métodos "nuevos" que resumen el modelo de subprocesamiento y permiten decisiones de tiempo de ejecución sobre números de subprocesos, etc. (en función del hardware de la máquina); para Microsoft en particular, vea F #, simultaneidad de tiempo de concurrencia, extensiones paralelas, etc.
Espero que ayude.
C++ CSP2 - Fácil de concurrencia para C++
http://www.cs.kent.ac.uk/projects/ofa/c++csp/
CSP es una basada en un paradigma concurrente adecuado en lugar de hilos y cerraduras y todo otro tipo de cosas que se insertan en el último momento .
(Ver Occam-Pi para un lenguaje de programación concurrente (también basado en CSP))
artículos: Hora de estos artículos para saber sobre la concurrencia
¿Va a agregar un resumen de los puntos clave de los artículos, o es una [respuesta solo de enlace] (http://meta.stackexchange.com/questions/72000/should-herehere-a- policy-about-one-link-only-answers)? (Uno de los enlaces ya está muerto, por cierto.) – jogojapan
Esto es el mejor artículo para comprender la programación concurrente: Concurrent Programming
Obtendrá una imagen completa de la programación concurrente y C++ después de leerla.
Como resumen rápido, podemos decir que la programación concurrente es hacer multitareas. Cuando un programa se bloquea, puede hacer otras cosas. Por lo general, nos bloquean mientras esperamos las conexiones de red y manejamos las E/S. Podemos facilitar la programación concurrente usando fork()
y las bibliotecas de hilos.
El enlace que publicó arroja un 404. – xyres
- 1. Programación concurrente muy simple en Python
- 2. Diccionario concurrente en C#
- 3. acceso variable concurrente en c
- 4. ¿Concurrente es Prolog?
- 5. Árbol concurrente eficiente
- 6. Implementando un LinkedHashMap concurrente
- 7. ¿Colección concurrente sin bloqueo?
- 8. Diccionario concurrente Uso correcto
- 9. Funcionalmente equivalente a la multimapa concurrente
- 10. ¿Existe una biblioteca de contenedores concurrente para C++
- 11. ¿Qué es la solicitud concurrente (-c) en Apache Benchmark?
- 12. Elegir un modelo de coherencia para un lenguaje de programación concurrente
- 13. Python vs. Java - ¿Qué elegirías para hacer una programación concurrente y por qué?
- 14. Programación de Windows C++ C++
- 15. Devolución de llamada asíncrona concurrente
- 16. HashMap concurrente: comprobación de tamaño
- 17. Generación concurrente de números aleatorios
- 18. Llamada concurrente a la conversación
- 19. Problemas de ejemplo para el cómputo concurrente
- 20. Programación genética en C#
- 21. Programación paralela y C++
- 22. programación C# red
- 23. Programación C Función sqrt
- 24. C++ Concursos de programación
- 25. mediante programación en C#
- 26. Programación paralela en C#
- 27. C Programación: + = vs = +
- 28. simple c programación gui
- 29. Programación funcional en C++
- 30. Problemas Queuing concurrente y no concurrentes
Si la informática concurrente es nueva para usted, asegúrese de consultar algunos artículos básicos como http://en.wikipedia.org/wiki/Programación_concurrente. – lothar