multithreading c with examples
Una breve introducción al multiproceso en C ++.
En este tutorial, obtendremos una descripción general del subproceso múltiple en C ++.
Entonces, ¿qué es un hilo? Un hilo es una unidad de trabajo de un proceso particular. En los sistemas operativos de programación múltiple, diferentes procesos se ejecutan simultáneamente.
De manera similar, es posible que deseemos ejecutar las mismas instancias de proceso simultáneamente. Cada instancia de proceso, en este caso, se asigna a una unidad de ejecución llamada hilo. En un sistema de subprocesos múltiples, numerosos subprocesos se ejecutan simultáneamente de forma independiente entre sí.
=> Eche un vistazo a la guía para principiantes de C ++ aquí.
¿Qué aspecto tiene un módem y un enrutador?
Antes de C ++ 11, teníamos soporte para subprocesos POSIX. Pero esta característica tenía serios problemas de portabilidad, ya que solo funcionaba en el sistema operativo Linux o UNIX. Por lo tanto, desde C ++ 11 en adelante, tenemos una sola clase std :: hilo que define toda la funcionalidad de los hilos. Las clases y funciones se definen en el archivo de encabezado.
Lo que vas a aprender:
Trabajo de
Usando std :: thread simplemente necesitamos crear un nuevo objeto thread y pasarle un invocable. Un invocable es un código ejecutable que queremos ejecutar cuando el hilo se está ejecutando. Entonces, cuando queremos un nuevo hilo, simplemente creamos un objeto de std :: hilo y pasamos un invocable como argumento a su constructor.
Una vez que se crea el objeto std :: thread, se lanza un nuevo hilo y se ejecuta el código proporcionado por invocable.
Veamos cómo podemos definir un invocable que se proporcionará al objeto hilo.
Un invocable se puede definir de tres formas.
# 1) Usando el objeto de función
Podemos usar un objeto de función como invocable en el objeto de hilo. Para usar el objeto de función, necesitamos tener una clase y en esa clase, sobrecargamos el operador (). Esta función sobrecargada contiene el código que se ejecutará cuando se cree el hilo.
transportador de extremo a extremo marco de prueba para aplicaciones de angularjs|_+_| |_+_|
Tenga en cuenta la forma en que se define el objeto hilo. Como primer parámetro del constructor del objeto hilo, proporcionamos la función sobrecargada y luego especificamos sus argumentos (params) como segundo argumento.
# 2) Uso del puntero de función
Un puntero de función invocable con se puede definir de la siguiente manera.
|_+_|Una vez que definamos esta función, podemos crear un objeto hilo con esta función como invocable, de la siguiente manera.
|_+_|Tenga en cuenta que los argumentos (parámetros) pasados a la función se proporcionan después del nombre de la función en el objeto hilo.
# 3) Usando una expresión Lambda
También podemos tener un invocable como expresión lambda y pasarlo al objeto hilo para su ejecución. El fragmento de código para el mismo se muestra a continuación.
|_+_| |_+_|En el código anterior, hemos definido una expresión lambda f y luego la pasamos al constructor del objeto del hilo como el primer argumento seguido de sus parámetros (params) como el segundo argumento.
|_+_|En algunos casos, es posible que deseemos que el hilo que se está ejecutando actualmente termine antes de comenzar otra acción.
Un ejemplo clásico es cuando abrimos la aplicación GUI. En el momento en que abrimos la aplicación, se inicia un subproceso para cargar e inicializar la GUI y no podemos realizar ninguna acción a menos que la carga y la inicialización se realicen correctamente para garantizar que la GUI funcione correctamente.
La clase std :: thread proporciona un método join () que asegura que el hilo actual (señalado por * this) termine primero antes de que se realice cualquier otra acción.
Toma el siguiente ejemplo,
cómo abrir un archivo apk en android|_+_|
En el ejemplo anterior, la función principal tendrá que esperar para continuar hasta que finalice el hilo t1. En general, la función de unión del hilo bloquea otras acciones / funciones hasta que la llamada del hilo finaliza su ejecución.
Ejemplo de hilo
Presentamos un ejemplo de codificación completo para la creación y ejecución del hilo en el programa que se muestra a continuación.
|_+_|Producción:
Hilo 1 :: invocable => puntero de función
Hilo 1 :: invocable => puntero de función
Hilo 3 :: invocable => expresión lambda
Hilo 3 :: invocable => expresión lambda
Hilo 2 :: invocable => objeto de función
Hilo 2 :: invocable => objeto de función
En el ejemplo anterior, hemos creado tres subprocesos utilizando tres diferentes invocables, es decir, puntero de función, objeto y expresión lambda. Creamos 2 instancias de cada hilo y las iniciamos. Como se muestra en la salida, tres subprocesos operan simultáneamente de forma independiente entre sí.
Lectura recomendada = >> Guía de prueba de hilos
Conclusión
En este tutorial, hemos visto los conceptos de multiproceso en C ++ con un claro ejemplo. En nuestros tutoriales posteriores, aprenderemos más temas de C ++ que nos ayudarían a escribir programas robustos y eficientes.
=> Lea la serie de formación Easy C ++.
Lectura recomendada
- Tutorial de la función principal de Python con ejemplos prácticos
- Tutorial de Python DateTime con ejemplos
- Cortar comando en Unix con ejemplos
- Sintaxis del comando Unix Cat, opciones con ejemplos
- Uso del cursor en MongoDB con ejemplos
- Comando Ls en Unix con ejemplos
- Método MongoDB Sort () con ejemplos
- Comando Grep en Unix con ejemplos simples