Programación General > C/C++

 Programación Asíncrona

<< < (2/3) > >>

m0skit0:

--- Cita de: "rfog" ---Puedes trabajar de forma asíncrona sin hilos cuando estás haciendo E/S a disco mediante las estructuras OVERLAPPED de CreateFile/ReadFile/WriteFile.
--- Fin de la cita ---
Aún así estás usando multihilo o multiproceso, aunque sea de forma transparente

Igualmente estoy casi convencido que lo hará con hilos u otro proceso si no necesita acceder a la memoria/código de tu proceso.

Leber:

--- Cita de: "m0skit0" ---Aún así estás usando multihilo o multiproceso, aunque sea de forma transparente

Igualmente estoy casi convencido que lo hará con hilos u otro proceso si no necesita acceder a la memoria/código de tu proceso.
--- Fin de la cita ---

Segun tengo entendido, los hilos a diferencia de los procesos, comparten memoria y código, no? Así que no habría mucho problema si un hilo auxiliar necesita modificar, por ejemplo, una variable global.

rfog:

--- Cita de: "m0skit0" ---
--- Cita de: "rfog" ---Puedes trabajar de forma asíncrona sin hilos cuando estás haciendo E/S a disco mediante las estructuras OVERLAPPED de CreateFile/ReadFile/WriteFile.
--- Fin de la cita ---
Aún así estás usando multihilo o multiproceso, aunque sea de forma transparente

Igualmente estoy casi convencido que lo hará con hilos u otro proceso si no necesita acceder a la memoria/código de tu proceso.
--- Fin de la cita ---

Pero eso lo está haciendo Windows internamente, tu no te tienes que preocupar de nada más de que cuando se ejecute tu callback los datos están en el buffer y son válidos.

rfog:

--- Cita de: "Leber" ---
--- Cita de: "m0skit0" ---Aún así estás usando multihilo o multiproceso, aunque sea de forma transparente

Igualmente estoy casi convencido que lo hará con hilos u otro proceso si no necesita acceder a la memoria/código de tu proceso.
--- Fin de la cita ---

Segun tengo entendido, los hilos a diferencia de los procesos, comparten memoria y código, no? Así que no habría mucho problema si un hilo auxiliar necesita modificar, por ejemplo, una variable global.
--- Fin de la cita ---

Así es. No sólo variables globales, sino variables de instanca y objetos. Un hilo tiene su propia pila pero comparte el montículo global de la aplicación, aunque si quieres puede tener un montículo aparte, así como TLS (Thread Local Storage), al menos en Windows.

Y sí, puedes acceder a cualquier objeto global o de instancia con visibilidad (un hilo no es más que una función que se ejecuta de forma "simultanea" con otras), pero ten en cuenta que tienes que "sincronizar" el acceso, porque un hilo podría leer una variable mientras que otro la está modificando y el resultado queda indeterminado.

La forma más sencilla de sincronizar es tener unos "flags" que indiquen cuándo un hilo está modificando. Aunque la forma correcta son las secciones críticas, los mutex y los semáforos.

Y declara todas las variables que vayan a usar diferentes hilos como "volatile" o podrías tener problemas en entornos multicore o multiprocesador.

Leber:
Yo había he usado hilos, en códigos mios para aprender, y si que se que para modificar secciones críticas lo mejor es bloquear el mutex y luego desbloquearlo, lo que no sabía es que las variables debían ser volatiles.

Saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa