Sincronización de procesos
Una de las principales utilidades de las señales es la
sincronización entre dos procesos. Por sincronización se entiende
que un proceso realizará un conjunto de instrucciones cuando otro
proceso se lo indique, o bien paralizará una actividad hasta que se
cumpla una condición determinada.
Hasta que no conozcamos los medios de comunicación que permiten
intercambiar datos, la única posibilidad que tenemos para que dos
procesos conozcan el pid de otro proceso es la ejecución de dos
procesos, uno padre y otro hijo. En este sentido, vamos a
desarrollar un ejemplo en el que un proceso padre y un proceso hijo
se ejecutan de forma síncrona; el código de lo que realiza cada uno
de los procesos no es relevante para el ejemplo.
La ejecución del proceso padre crea, en primer lugar, el proceso
hijo; éste comenzará entonces a ejecutar un código cualquiera, de
forma independiente de lo que debe ejecutar el proceso padre.
Cuando llegue el momento en que el hijo necesite que el padre
realice un conjunto de acciones, quedará a la espera de que el
padre termine las operaciones oportunas y envíe una señal para que
comiencen a ejecutarse las acciones del hijo; esto es lo que
llamamos ejecutar dos procesos de forma sincronizada. El proceso
padre enviará una señal SIGUSR1 al proceso hijo cuando desee
que comience a ejecutarse. Una vez que el hijo haya terminado las
acciones que tenía asignadas, enviará una señal SIGUSR1 al
proceso padre.
Evidentemente, la ejecución del hijo depende de la ejecución del
padre. Si en el proceso padre ocurre algún error en la ejecución de
acciones previas a la llamada al hijo, o bien se determina que no
es necesario que el proceso hijo continúe ejecutándose, el proceso
padre envía una señal SIGTERM para que finalice el proceso
hijo sin realizar ninguna acción. Cuando el proceso padre no puede
llevar a cabo el trabajo que tiene asignado, no tiene sentido que
el hijo realice ninguna operación.
Esta secuencia de acciones ejecutadas en paralelo se puede repetir
infinitamente; es decir, el bucle de acciones conjuntas
sería:
1. El proceso padre crea el proceso hijo.
2. El proceso padre ejecuta un conjunto de acciones a partir
de las cuales se desea que el proceso hijo continúe.
3. Si no hay error y se desea que el hijo ejecute sus
acciones:
3.1. El proceso padre envía una señal SIGUSR1 al hijo
para que comience.
3.2. El proceso hijo realiza un conjunto de acciones.
3.3. El proceso hijo envía la señal SIGUSR1 al
padre.
3.4. Volvemos a 2.
4. En caso contrario:
4.1. El proceso padre envía una señal SIGTERM al hijo
para que termine.
4.2. El proceso hijo termina.
4.3. El proceso padre termina.
El código completo de las acciones que se realizan en los procesos
padre e hijo se encuentra en las rutinas de tratamiento de la señal
SIGUSR1, que es distinta para el padre y el hijo.
Evidentemente, para que todo el proceso comience, se debe llamar
por primera vez a la rutina de gestión de la señal SIGUSR1
en el padre, sin esperar a la recepción de la señal; es decir,
directamente desde el código.
Información de los programas con certificado
Hay 1 opinión. Opina sobre este curso.
| Cursos | Valoración | Alumnos | Vídeo | |
|---|---|---|---|---|
|
El Ceremonial: estrategia de comunicación El protocolo Ceremonial, que se aplica en la actividad diplomática y en las ceremonias oficiales, ha ganado su espacio en el medio empresarial en los ... [06/11/09] |
|
67 | ||
|
Cambio global de la sociedad La humanidad experimenta un cambio de época, no una época de cambios. Transformaciones veloces, cualitativas y simultáneas en las relaciones de producción, relaciones de ... [24/11/06] |
|
1.697 | ||
|
Access con Visual Basic Microsoft Access con Visual Basic, aprende a crear una base de datos en Access usando Visual Basic. Veremos también cómo crear tablas e introducir... [01/07/09] |
|
4.649 | ||
Publicar en
del.icio.us
digg
meneame