procesos hijos y sus cosas

tengo un par de fork que lanzan unos procesos hijos... resulta que existe una variable en el programa que uno de ellos la cambia (un int de 1 a 0) pero resulta que el otro que tiene que actuar cuando esta variable cambia, no se entera de que cambia...

parece ser que haciendo fork es como si se clonara todo el programa variables incluidas lo cual es mu malo pa mis intereses...
como hacer que se enteren un cambio de un int 1 a 0 y de 0 a 1?
Eso es por una condición de competencia (race condition). Lo que intentas no es complicado, pero necesitas controlar la ejecución de los procesos explícitamente, ya que los procesos se ejecutarán de forma asíncrona por defecto.

Salu2.Ferdy
y como hago para controlar?
Hombre jeje pues a base de los waitpid y tal. Vamos que si no sabes programación concurrente mejor no te metas en camisa de once varas. Puedes mirarte la librería pthread para 'ahorrarte problemas'.

Y siempre, STFW please :D

Salu2.Ferdy
STFW please ¿que es eso?

mejor no controlo mucho... buscare otra manera de hacerlo.
STFW = Search The (Funny,Fucking,Flipping..) Web :D

Prueba con pthread

Salu2.Ferdy
Escrito originalmente por marcgenou
parece ser que haciendo fork es como si se clonara todo el programa variables incluidas lo cual es mu malo pa mis intereses...
como hacer que se enteren un cambio de un int 1 a 0 y de 0 a 1?


Parece ser no, es ;)

fork() crea una copia de la imágen del proceso actual, y eso incluye código, datos y estado de la pila.

Para lo que quieres hacer necesitas hilos, no nuevos procesos ;)
Puede hacerlo con fork utilizando el IPC System V. Pero siempre, teniendo en cuenta el tema de la ejecución asíncrona y las 'race conditions'

Salu2.Ferdy
veo ams interesante el usar threads ahi ke meterse kn los semaforitos y toda la ostia :)
GTTURBO ya lo se :D yo solo he dado opciones, si conoce el IPC System V le será siempre más fácil que aprender pthread.

Si ya te vas a meter con threads y no quieres aprender pthread, prueba gthread de la librería glib.

Salu2.Ferdy
gracias a todos por responder.... probare mirando pthread como dijo Ferdy
10 respuestas