elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  (Consulta) Mejor forma de implementar el algoritmo con programación concurrente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Consulta) Mejor forma de implementar el algoritmo con programación concurrente  (Leído 3,317 veces)
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
(Consulta) Mejor forma de implementar el algoritmo con programación concurrente
« en: 2 Julio 2017, 15:28 pm »

Hola a tod@s. Estoy introduciéndome en el mundo de la programación concurrente usando los hilos de POSIX. Estoy intentando implementar de forma segura lo siguiente:

Thread 1 (hilo POSIX): actualizar framebuffer (búfer de pantalla)
Thread 2 (hilo principal): actualizar imagen con una proveniente de una cámara.

El framebuffer se actualiza con la imagen leida de la cámara. Entonces, una secuencia de ejecución sería algo parecido a:

|-----Actualizar imagen-----|-----Actualizar imagen-----|-----Actualizar imagen-----|
|--------Actualizar framebuffer--------|--------Actualizar framebuffer--------|--------Actualizar framebuffer--------|

Es posible que actualizar el framebuffer ocupe menos tiempo que actualizar la imagen, no se sabe.

Entonces mi pregunta es: ¿cuál creen que es la mejor forma de actualizar el framebuffer sin que haya tearing (se mezcle el frame anterior con el actual)?

Lo ideal sería que fuera lo más eficientemente posible, es decir, que si ya se ha leido una imagen, el actualizador del framebuffer no tenga que esperar a que se lea otra imagen.

No pido que me den código, solo pregunto cual sería la idea de implementación (no sé si me explico)


« Última modificación: 2 Julio 2017, 15:30 pm por class_OpenGL » En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: (Consulta) Mejor forma de implementar el algoritmo con programación concurrente
« Respuesta #1 en: 2 Julio 2017, 17:11 pm »

Si tenemos los 2 threads separados, en adelante logica y renderizado, puedes tener un objeto  al que tengan acceso ambos con la imagen (y además, todas las variables necesarias para la sincronización de los threads al acceder a este).

Luego, cada uno trabaja por su lado:
- La lógica leerá la imagen en su propio objeto. Cuando termine, lo asignará al objeto compartido, y eliminará el anterior si lo hubiere (un simple swap a un puntero atómico serviría).
- El renderizado cogerá el objeto (si lo hubiere), y lo renderizará. Al finalizar, lo elimina (o utiliza otro thread como recolector de basura, como veas). Si no hubiese aun objeto, pues una de dos, o esperas, o renderizas el anterior. A gusto del consumidor (literalmente, esto es un problema productor-consumidor). La verdad, es que con solo esta información, no hay mucho más margen de posibilidades.

De todos modos, si te estás iniciando a programación concurrente, trabajar con la gráfica es el último lugar en el que empezaría. Conviertes un problema trivial en un problema más complejo.

Por cierto, con respecto a esto, hay un vídeo de la CPPCON que trata este tema, aunque de forma más profunda: https://www.youtube.com/watch?v=8AjRD6mU96s


En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) Mejor forma de implementar el algoritmo con programación concurrente
« Respuesta #2 en: 2 Julio 2017, 19:36 pm »

Si, tienes razón! Debería empezar por algo más sencillo. ¿Por dónde recomendarías empezar? ¿Sabes de una buena página con buenos ejercicios? Eché un ojo pero no vi demasiados buenos ejercicios. Gracias
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: (Consulta) Mejor forma de implementar el algoritmo con programación concurrente
« Respuesta #3 en: 2 Julio 2017, 20:24 pm »

Si, tienes razón! Debería empezar por algo más sencillo. ¿Por dónde recomendarías empezar? ¿Sabes de una buena página con buenos ejercicios? Eché un ojo pero no vi demasiados buenos ejercicios. Gracias

No conozco, pero vaya. Siempre puedes haacer un contenedor de cualquier tipo y hacerlo thread-safe :D
O un algoritmo, como QuickSort.

Otra opción es hacer algún tipo de juego/chat/pizarra online; el servidor puede llevar threads, que escribirán y leerán datos continuamente de los "datos de la sesión".
« Última modificación: 2 Julio 2017, 20:31 pm por ivancea96 » En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: (Consulta) Mejor forma de implementar el algoritmo con programación concurrente
« Respuesta #4 en: 2 Julio 2017, 20:37 pm »

De acuerdo, muchas gracias!
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programacion concurrente
Ejercicios
omykron 0 3,592 Último mensaje 23 Enero 2007, 07:47 am
por omykron
Cual crees que es la mejor forma de aprender programacion? « 1 2 3 »
Programación General
linux1 26 15,403 Último mensaje 24 Diciembre 2010, 18:43 pm
por flacc
PROGRAMACION CONCURRENTE
Java
maii210890 0 2,510 Último mensaje 11 Abril 2013, 01:55 am
por maii210890
Conceptos de Programación Concurrente
Programación General
edr89 0 1,578 Último mensaje 25 Enero 2015, 03:17 am
por edr89
PTHREADS - Programación concurrente.
Programación C/C++
GGZ 2 2,318 Último mensaje 7 Mayo 2017, 04:43 am
por GGZ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines