Sistemas en Tiempo Real PDF
Sistemas en Tiempo Real PDF
Sistemas en Tiempo Real PDF
Lenguajes de Programacin
Objetivos del curso:
Comprender las caractersticas de los sistemas en tiempo real.
Aplicar los conceptos en el dominio industrial
Investigacin
Requisitos
Conocimientos de un lenguaje de programacin
secuencial.
Ingeniera de Software.
Introduccin a los conceptos bsicos del control
automtico.
Tema 1
Definicin de los sistemas en tiempo real.
Ejemplos.
Terminologa
Real real-time Sistemas de tiempo real son sistemas en los cuales el tiempo de
respuesta es muy corto.
Firm real-time Sistemas de tiempo real firme son sistemas de tiempo real no
estricto pero el tiempo lmite puede no cumplirse ocasionalmente pero no hay
beneficio por la entrega retrasada.
Lectura del
Flujo de entrada
Medidor de Flujo
Procesado
ngulo de
la vlvula de salida
Tiempo
Ordenador
Vlvula
Producto
final
Materia prima
PLANTA
Ordenador de mando y
control
Sensores/Actuatores
Algoritmos para
Control Digital
Registro de datos
Base de
Datos
Recuperacin y
Presentacin de datos
Consola del
operador
Interfaz
Del operador
Interfaz
Dispositivos de
Presentacin
Sistema de Ingeniera
Sistema de
monitorizacin
remota
Tema 2: Caractersticas de
un RTS(Sistema en tiempo
real)
Caractersticas de un RTS
Grande y complejo: Los programas deben cambiar
continuamente. Precisan de mantenimiento constante y
mejoras durante su ciclo de vida. Se pueden dividir en
componentes ms pequeos ms fciles de gestionar.
El software y el hardware deben ser fiables y seguros.
Control concurrente de los distintos componentes separados
del sistema. Un sistema embebido suele constar de
ordenadores y otros elementos externos con los que los
programas deben interactuar simultmeamente. La naturaleza
de estos elementos externos del mundo real suelen existir en
paralelo. Cuando los elementos externos se encuentran
distribuidos geogrficamente se deben considerar sistemas
embebidos distribuidos o multiprocesadores.
Caractersticas de un RTS
Control en tiempo real: Los sistemas de tiempo real se
construyen habitualmente utilizando procesadores con
considerable
capacidad
adicional
garantizando
el
comportamiento en el peor de los casos. El programador debe
especificar los tiempos en los que deben ser realizadas las
acciones, especificar los tiempos en los que las acciones
deben ser completadas, responder a situaciones en las que no
todos los requisitos temporales se pueden satisfacer y
responder a situaciones en las que los requisitos temporales
cambian dinmicamente ( modos de cambio). El programador
debe sincronizar el programa con el tiempo.
Caractersricas de un RTS
Interaccin con interfaces hardware.
Especificacin de registro de dispositivos y control de
interrupciones.
Lenguajes de alto nivel, niveles de calidad.
Control directo y evitar las arquitecturas con una capa de
funciones del sistema operativo.
Implementacin eficiente y entorno de ejecucin.
Evaluar el coste de las caractersticas de implementacin.
Resumen
Clasificacin de los sistemas de tiempo real:
Sistemas en tiempo real crtico
Sistemas en tiempo real acrtico
Caractersticas de un sistema de tiempo real o embebido:
Grandeza y complejidad,
Fiabilidad y seguridad extrema,
Control concurrente de componentes separados del
sistema,
Control en tiempo real,
Interaccin con interfaces hardware,
Implementacin eficiente,
Paradigmas de Programacin
Un paradigma de programacin representa un enfoque
particular para la construccin del software.
Segn las especificaciones del sistema un paradigma resulta
ms apropiado que otro.
Ejemplos de paradigmas:
Imperativo o por procedimientos: C
Funcional: Lisp
Lgico: PROLOG
Orientado a Objetos: Phyton, Java, C++
Descomposicin y Abstraccin
Programacin Estructurada:
Diseo descendente
Abstraccin - Diseo Inductivo
Mdulos: conjunto de objetos y operaciones relacionadas
lgicamente.
La tcnica de encapsulamiento sirve para aislar una
funcin en un mdulo.
La estructura Mdulo permite:
Ocultacin de Informacin
Compilacin por Separado: permite la construccin de
bibliotecas de componentes precompilados. Favorece la
reutilizacin.
Tipos abstractos de datos uso de estructuras
ADA, Java paquetes
C archivos separados la compilacin (esttico)
Java clases y objetos
Tcnicas
En la programacin estructurada se utilizan estructuras
de tipo secuencial, condicional e iterativa.
La programacin modular consiste en dividir un
programa en mdulos o subprogramas con el fin de
hacerlo ms legible y manejable. Es una evolucin de
de la programacin estructurada para solucionar
problemas de programacin ms grandes y complejos.
Un problema complejo debe de ser dividido en varios
subproblemas ms simples, repitiendo este proceso
hasta obtener subproblemas simples como para poder
ser resueltos por un lenguaje de programacin. Este
proceso se llama anlisis descendente (Top-Down). En
la prctica suelen representarse los mdulos como
procedimientos o funciones. Si un mdulo necesita de
otro se debe definir una interfaz de comunicacin.
Java/Real-Time Java
C and Real-Time POSIX (Laboratorios)
Ada 95
Also Modula-1 for device driving
Hardware
System
User Program
Including Operating
Hardware
System Components
Especificacin de requisitos
Diseo arquitectnico
Diseo detallado
Implementacin
Prueba
Otras actividades:
Prototipado previo a la implementacin final
Diseo de la interfaz hombre-mquina
Criterios para la evaluacin de los lenguajes de implementacin
Fallo
Defecto
Error
Fallo
4
Modo de fallo
Error de Lmites
Valor
erroneo
Adelantado
Fallo de Silencio:
a partir de un
momento falla el
servicio
Omission:
El servicio no
es entregado
Fallo de parada
Es un fallo
silencioso pero los
otros sistemas
detectan el fallo
Arbitrario
(Valor y Tiempo)
Retraso:error
De prestaciones
Fallo
controlado:
Falla de una
forma
Controlada y
especificada
6
Prevencin de Fallos
Fases en la prevencin de fallos: evitacin y
eliminacin
Fase Evitacin se intenta limitar la introduccin de
componentes potencialmente defectuosos durante la
construccin del sistema.
Hardware:
Componentes ms fiables dentro de las restricciones de coste
y prestaciones dadas.
Tcnicas exhaustivamente refinadas para la interconexin de
componentes y el ensamblado de subsistemas.
Aislamiento para protegerlo de formas de interferencia
esperadas.
8
Prevencin de Fallos
Fase Evitacin Cont.
Software:
Especificacin de requisitos rigurosas, si no formales.
Metodologa de diseo.
Lenguajes que faciliten la abstraccin de datos y la
modularidad.
Herramientas de ingeniera de software para ayudar en
la manipulacin de los componentes de software y en la
gestin de complejidad.
Prevencin de Fallos
Fase Eliminacin de Fallos:
Procedimientos para encontrar y eliminar las
causas de los errores.
Revisores de diseo.
Verificacin de programas
Inspecciones del cdigo.
Pruebas del sistema.
10
Prevencin de Fallos
Nota: Como los componentes de HW pueden fallar la
prevencin de fallos puede ser inapropiada cuando la
frecuencia o la duracin de los tiempos de reparacin
resulten inaceptables o cuando no se pueda acceder al
sistema para actividades de mantenimiento y
reparacin.
11
Tolerancia a fallos.
Niveles de tolerancia a fallos de un sistema:
Tolerancia total frente a fallos: el sistema continua en
funcionamiento en presencia de fallos, aunque por un
perodo limitado, sin una prdida significativa de
funcionalidad o prestaciones. (Sistemas de
seguridad)
Degradacin controlada( o cada suave) el sistema
continua en operacin. Si los sistemas son muy
complejos y deben funcionar de forma continua con
requisitos de alta disponibilidad.
Fallo seguro: el sistema cuida de su integridad
durante el fallo acaptando una parada temporal de su
funcionamiento.
12
Funcionalidad mnima
Precisa para mantener el
control areo bsico
Funcionalidad de emergencia
slo para dar separacin
Entre aviones.
Redundancia
Todas las tcnicas utilizadas para
conseguir tolerancia a fallos se basan en
aadir elementos extra al sistema para
que detecte y se recupere de los fallos,
estos componentes no son necesarios
para el normal funcionamiento del sistema
(Redundancia protectora)
Tipos: Hw y SW
14
Redundancia HW
Esttica o Enmascarada:
TMR-Triple Modular Redundancy consiste en tres componentes
o idnticos y en circuitos de votacin por mayora. Los circuitos
comparan la salida de todos los componentes, y si alguna difiere
de las otras dos es bloqueada. En este caso se supone que el
fallo se debe a un error transitorio o al deterioro de algn
componente.
NMR- redundancia N modular
Programacin de N-versiones
Versin 1
Versin 2
estatus
Versin 3
estatus
estatus
voto
vote
voto
Director
17
Programacin de N-versiones
Aspectos principales
T1
T2
> Tth
T3
no
> Tth
si
> Tth
si
P1
P2
P3
no
> Pth
> Pth
> Pth
si
18
V1
V2
V3
Programacin de N-versiones
Aspectos principales:
Especificacin Inicial Un error en la
especificacin permanecer en las Nversiones.
Independencia en el diseo: Un sistema de
tres versiones es ms fiable que un sistema
de alta calidad de versin nica.
Presupuesto adecuado: con la mayora de los
sistemas embebidos el principal coste se
debe al software.
19
Comprobacin de rplicas
Comprobaciones temporales
Comprobaciones inversas Una entrada y una salida.
Cdigos de comprobacin checksum, corrupcin de datos
Comprobaciones de racionalidad (aserciones)
Comprobaciones estructurales
Comprobaciones de racionalidad dinmica
21
fallo
Establece punto
de recuperacin
Alguna
alternativa
Si
Ejecuta
siguiente
alternativa
Pasa
Evala test
De
aceptacin
Descarta punto
de recuperacinint
No
Falla bloque
De recuperacin
22
Redundancia dinmica y
excepciones
Una excepcin es la ocurrencia de un
error.
Generar una excepcin es mostrar la
condicin de excepcin que ha causado
dicha excepcin.
La respuesta es la captura de la
excepcin.
23
Manejo de excepciones
Representacin de excepciones: de forma
explcita o implcita.
Dominio de un manejador de excepciones:
con cada manejador viene asociado un
dominio que significa la regin cmputo
durante la cual se activar el manipulador
si aparece una excepcin. El dominio se
encuentra asociado a un bloque, un
subprograma o una sentencia.
24
Ejemplos
C
if(llamada_funcion(parametros) == Un_Error) {
/* cdigo para el manejo de errores */
} else {
/*cdigo para el retorno normal*/
};
25
Ejemplos
C++ - definicin del dominio
try {
// sentencias que pueden generar una
//excepcin
}
catch (ExceptionType e) {
// manejador para e e
}
26
Manejo de excepciones
Propagacin de excepciones: Cuando se
lance una excepcin, puede que no exista
ningn manejador de excepciones en el
dominio que la encierra. En este caso
podr propagarse la excepcin hacia el
siguiente nivel de dominio que lo
envuelve, o podr considerarse como un
error de programacin.
27
Modelo de Reanudacin
Hq
P invoca Q
Hr genera
la excepcin
q
P
Hq reanuda Hr
Hr
Q invoca R
R genera
la excepcin
r
Q
Hq reanuda R
2
6
R
28
Modelo
deTerminacin
Procedimiento P
1
P invoca Q
Procedimiento Q
3
Q invoca R
Procedimiento R
5
4
Generada la
excepcin r
Manejador
visto
6
Termina
el
procedimiento
Manejador
para r
29
Manejo de excepciones
El modelo de reanudacin o de
terminacin determina la accin a tomar
tras el manejo de una excepcin. Con el
modelo de reanudacin el invocador de la
excepcin se reanuda en la sentencia
posterior a la que provoc la excepcin.
Con el modelo de terminacin el bloque o
procedimiento que contiene el manejador
es terminado, y se pasa el control al
bloque o procedimiento que lo llam.
30
Tema 3: Concurrencia
Programacin Concurrente
Teora y ejemplos de implementacin
Programacin Concurrente
Denominamos programacin concurrente a la
notacin y tcnicas de programacin que expresan
el paralelismo potencial y que resuelven los
problemas resultantes de la sincronizacin y la
comunicacin. La implementacin del parlelismo
es un tema de los sistemas informticos (SW y
HW) La importancia de la programacin
concurrente est en que proporciona un entorno
abstracto donde estudiar el paralelismo sin tener
que enfrescarse en los detalles de implementacin.
(Ben-Ari, 1982)
2
Programacin Concurrente
Los sistemas operativos proporcionan mecanismos
para crear procesos concurrentes. Cada proceso se
ejecuta en su propia mquina virtual, para evitar
interferencias con otros procesos no relacionados.
Los sistemas operativos modernos permiten crear
procesos dentro del mismo programa accediendo
de modo compartido, y sin restricciones, a la
memoria comn ( estos procesos suelen llamarse
hilos o hebras).
3
Multiprogramacin
Los procesos son ejecutados,
concurrentemente, compartiendo uno o ms
procesadores (c/u con su memoria)
El kernel del sistema operativo multiplexa
los procesos en los procesadores
Proc7
Proc1
Proc2
M1 CPU1
Proc6
M2 CPU2
Proc5
Proc3
Proc4
Multiprocesamiento
Se ejecuta un proceso en cada procesador
Los procesos comparten una memoria en
comn
Proc1
CPU1
Proc2
Proc3
Proc4
CPU2
CPU3
CPU4
Memoria comn
Procesamiento distribuido
Los procesos estn conectados a travs de
una red de comunicacin
Cada procesos cuenta con su memoria
Proc1
Proc2
Proc3
Proc4
CPU1
CPU2
CPU3
CPU4
M1
M2
M3
M4
red de comunicacin
Noexistente
existente
No
Creado
Creado
Inicializacin
Inicializacin
Terminado
Terminado
Ejecutable
Ejecutable
7
Programacin concurrente
Los sistemas operativos que se ajustan a
POSIX se debe distinguir entre
concurrencia de programas (procesos) y la
concurrencia dentro de un programa (hilos).
Programacin concurrente
Servicios fundamentales:
La expresin de ejecucin concurrente
mediante la nocin de proceso.
La sincronizacin de procesos.
La comunicacin entre procesos.
Programacin concurrente
Interaccin entre procesos:
Independiente: no se comunican o sincronizan
entre s.
Cooperativo: Se comunican con regularidad y
sincronizan sus actividades para realizar alguna
operacin comn.
Competitivo: Para que los procesos obtengan
una proporcin justa de recursos deben
competir entre s.
10
Hilos
Hilos: permiten mltiples flujos de control
que se ejecutan de manera concurrente
dentro de uno de sus programas. Los hilos
permiten que su programa emprenda varias
tareas de cmputo al mismo tiempo, una
caracterstica que da soporte al programa
orientado a eventos.
11
run()
run()
16
17
18
19
Exclusin mutua
Sincronizacin
Calendarizacin
Punto muerto
20
Tema 4: Tareas
Exclusin Mutua
Mutex
Gua
Caractersticas procesos
concurrentes
Los procesos son concurrentes si existen
simultneamente
Pueden funcionar en forma totalmente
independiente, unos de otros
Pueden ser asncronos lo cual significa que
en ocasiones requieren cierta sincronizacin
y cooperacin
3
Representacin de procesos
La estructura del programa permite localizar los
segmentos que pueden ejecutarse concurrentemente
Mecanismos bsicos para representar la ejecucin
concurrente:
corutinas
fork-join
el enunciado co-begin
Pueden usarse para especificar un nmero esttico o
dinmico de procesos
Corutinas
Propuestas por Conway en 1963
Corutinas son subrutinas que permiten una
transferencia de control de una forma
simtrica ms que jerrquica
Cada corutina puede ser vista como la
implementacin de un proceso
Bien usadas, son un medio para organizar
programas concurrentes que comparten un
mismo procesador
6
Elementos corutinas
El enunciado resume
transfiere control a la corutina mencionada
guarda informacin necesaria para controlar la
ejecucin de regreso
El enunciado call
inicializa el clculo de la corutina
El enunciado return
transfiere el control de regreso al procedimiento
7
que realiz un call
Comentarios corutinas
La ejecucin, por parte de un proceso, de
resume provoca una sincronizacin
No son adecuadas para un verdadero
procesamiento paralelo
Son procesos concurrentes en el que el
switcheo de procesos ha sido
completamente especificado y no dejado al
kernel o a la implementacin
Lenguajes: SIMULA I y SL5
8
Enunciados fork-join
Enunciado fork especifica que una rutina
puede empezar su ejecucin
La rutina invocada y la rutina invocadora
proceden concurrentemente
Para sincronizar invocada e invocadora, esta
ltima puede ejecutar un join
Enunciado join retrasa ejecucin rutina
invocadora hasta que la rutina invocada
termine
9
Comentarios fork-join
Enunciados fork-join puede aparecer en
condicionales y ciclos
es necesario entender bien la ejecucin del programa,
para saber que rutinas se van a ejecutar concurrentemente
El enunciado cobegin
Es una forma estructurada de denotar una
ejecucin concurrente
Por ejemplo:
cobegin S1 || S2 || || Sn coend
denota una ejecucin concurrente de S1, S2,
Sn
cada uno de los Sis puede ser cualquier
enunciado incluyendo un cobegin o un bloque
con declaraciones locales
11
Caractersticas cobegin
La ejecucin de un cobegin solo termina cuando la
ejecucin de todos los Sis termin
No es tan potente como fork-join, pero es
suficiente para especificar la mayor parte de los
clculos concurrentes
Sintaxis hace explcito cuales rutinas son
ejecutadas concurrentemente
Variantes implementadas en ALGOL68, CSP,
Edison y Argus
12
Ejecucin concurrente:
Tareas/Procesos
Declaracin explcita de los procesos:
task body Process is
begin
. . .
end;
Ejemplo: ADA
13
14
Ejemplo
15
16
int main() {
int X, Y, Z, rc;
void *result;
printf("Programa ejecutandose...Para finalizar, cierre la ventana. \n");
inicio=time(NULL); // cogemos tiempo de referencia
X = 1,
Y = 2;
Z = 3;
/* se establecen los atributos por defecto */
rc=pthread_attr_init(&attributes);
checkResults("pthread_attr_init()", rc);
rc=pthread_create(&xp, &attributes, controller, (void *)&X);
checkResults("pthread_create(X)", rc);
rc=pthread_create(&yp, &attributes, controller, (void *)&Y);
checkResults("pthread_create(Y)", rc);
rc=pthread_create(&zp, &attributes, controller, (void *)&Z);
checkResults("pthread_create(Z)", rc);
pthread_join(xp, (void **)&result);
/* Necesario para bloquear el programa principal
La rutina pthread_join espera a que finalizen las hebras,
con lo que se queda en espera pues las hebras no finalizan
*/
exit(EXIT_FAILURE);
/* El programa no debera terminar con lo que si finaliza se devuelve un
error */
}
17
18
/*
Rutina de simulacion del movimiento del brazo.
Se graban mensajes en un fichero para cada eje de movimiento
*/
void move_arm(int *D, int P)
{
FILE * pFile;
char c[50];
long t;
if (P<MAXREGS ) // ponemos condicin para grabar en fichero sino se grabara indefinidamente
{
if (P==0) // creamos los ficheros al inicio del movimiento
{
if (*D==1) pFile = fopen ("ejex.txt","w");
if (*D==2) pFile = fopen ("ejey.txt","w");
if (*D==3) pFile = fopen ("ejez.txt","w");
}
else
{
if (*D==1) pFile = fopen ("ejex.txt","a+");
if (*D==2) pFile = fopen ("ejey.txt","a+");
if (*D==3) pFile = fopen ("ejez.txt","a+");
}
tiempo=time(NULL);
t=tiempo-inicio;
sprintf(c, "[clock: %d seg.] Valor de posicion P=%d \n",t,P);
fputs (c,pFile);
fclose (pFile);
}
}
19
A implementar new_setting
20
Comunicacin y Sincronizacin
El comportamiento correcto de un programa concurrente
depende estrechamente de la sincronizacin y la
comunicacin entre procesos.
Sincronizar es satisfacer las restricciones en el entrelazado
de las acciones de diferentes procesos. Una accin
particular de un proceso slo ocurre despus de una accin
especfica de otro proceso.
La sincronizacin debe llevar simultneamente a dos
procesos a estados predefinidos.
Comunicar es pasar informacin de un proceso a otro. Los
dos conceptos estn ligados, puesto que algunas formas de
comunicacin requieren sincronizacin y la sincronizacin
puede ser considerada como comunicacin sin contenido.
21
La exclusin mutua
Garantizar que si un proceso utiliza una variable o
algn recurso compartido, los dems no podrn
usarlos al mismo tiempo
Conocida como mutex
Cada proceso debe verificar que durante cierta
parte del tiempo, puede tener acceso a la memoria
compartida de archivos o realizando labores
crticas que pueden llevar a conflictos
22
Exclusin Mutua
La comunicacin entre procesos se basa
normalmente o en el uso de variables
compartidas o en el paso de mensajes.
Aunque las variables compartidas parecen
una forma directa de pasar informacin
entre procesos su uso debe ser restringido.
Debido a los problemas de actualizacin.
23
Exclusin mutua
Una secuencia de sentencias que debe
aparecer como ejecutada indivisiblemente
se denomina seccin crtica.
La sincronizacin que se precisa para
proteger una seccin crtica se conoce como
exclusin mutua.
24
Seccin crtica
Parte del cdigo en el cual se tiene acceso a
una variable o archivo compartido
Corolario:
si dos procesos no estn al mismo tiempo en
seccin crtica, podemos evitar las condiciones
de competencia
25
Asignacin recursos
Sean n procesos que entran en conflicto por el
acceso a un recurso nico no compartible
Recurso a usar en seccin crtica
Necesario usar un protocolo formado de tres
partes:
protocolo de adquisicin
<uso del recurso en seccin crtica>
protocolo de liberacin
26
Gestin de Mutex
27
Gestin de Mutex
Introduccin
Mutex es una abreviacin de "mutual exclusion". Las rutinas Mutex ofrecen una
de las principales herramientas para implementar sistemas de sincronizacin de
hebras y de proteccin de variables compartidas cuando se accede en modo
escritura desde varios hilos de forma simultnea. Cuando hablamos de mutex
nos referimos en realidad a la variable asociada al mutex o mutex variable
El mutex acta como una llave, protegiendo el acceso a recursos compartidos. El
concepto bsico subyacente a las rutinas mutex usadas en Pthread es que
nicamente 1 hebra puede tener el control o bloquear una variable mutex en un
instante del tiempo, es decir, si varias hebras intentan simultneamente tomar el
control de la variable, nicamente una de ellas lo conseguir, ponindose las
dems hebras en cola de espera hasta que el mutex sea desbloqueado por la
hebra propietaria.
Los mutex se pueden utilizar para evitar situaciones inconsistentes por ejemplo
en una situacin en que se accede simultaneamente a una variable que acumula
el saldo de una cuenta podramos encontrarnos con la siguiente situacin:
Tiempo
T1
Hebra 1
Saldo ledo: 8000
T2
T3
T6
Saldo
8000
T4
T5
Hebra 2
8000
8000
Ingresa: 200
Actualiza Saldo: 8000+200
8000
8200
8200!!
En este ejemplo, la hebra que actualiza el saldo debe bloquear el mutex antes de
la lectura del saldo y desbloquearlo una vez actualizado su valor. A menudo las
acciones que efecta una hebra propietaria de un mutex es actualizar variables
globales. Esta es la manera de garantizar que el resultado de la actualizacin ser
el mismo que se hubiera producido si solamente tuviramos una hebra en
ejecucin.
La secuencia tpica de instrucciones de un mutex es la siguiente:
o Inicializar y crear el mutex
o Varias hebras intentan bloquear el mutex
o Unicamente una de ellas lo consigue, pasando a ser la hebra propietaria
o La hebra propietaria efecta una serie de acciones
o La hebra propietaria desbloquea el mutex
o Otra hebra toma el control del mutex y se repite la secuencia
o Finalmente se destruye el mutex.
Pthread_mutex_init:
Pthread_mutex_destroy:
Pthread_mutex_lock:
Pthread_mutex_trylock:
lo ha bloqueado (hebra propietaria del mutex). Se debe llamar a esta rutina una
vez la hebra ha completado las instrucciones que deban ser protegidas de
accesos concurrentes. Se produce un error si el mutex ya est desbloqueado o
bien la hebra no es propietaria del mutex.
Cuando varias hebras estan esperando el desbloqueo de un mutex para adquirirlo
como propietarias, a menos que se haya aplicado algn mecanismo de
planificacin (priorizacin), la asignacin del mutex a una u otra hebra se delega
al sistema operativo, el cual, lo har de forma ms o menos aleatoria.
Es responsabilidad del programador hacer buen uso de la utilizacin del mutex.
En el siguiente ejemplo (en el cual hay una hebra para la cual no se ha
especificado mutex) se ha producido un error de lgica de programacin ya que
el resultado final ser aleatorio:
Hebra 1(*)
Lock
A = 2
Unlock
<pthread.h>
<windows.h>
<stdio.h>
<stdlib.h>
"check.h"
for(i=0;i<NUMTHRDS;i++)
{
// asignamos valores a la variable pasada por parametro.
Identificar el mutex
num_thrd[i]=i+1;
// creamos la 4 hebras
rc=pthread_create( &callThd[i], &attr, acumsaldo, (void
*)&num_thrd[i]);
checkResults("pthread_create()", rc);
}
rc=pthread_attr_destroy(&attr);
checkResults("pthread_attr_destroy()", rc);
/* Esperamos la finalizacin de las 4 hebras */
for(i=0;i<NUMTHRDS;i++) {
rc=pthread_join( callThd[i], &status);
checkResults("pthread_join()", rc);
}
/* Despues del join, presentamos el resultado */
printf ("Saldo = %f \n", Saldo);
pthread_mutex_destroy(&mutexsum);
system("pause");
pthread_exit(NULL);
}
void *acumsaldo(void *arg)
{
int i,j, *hebra;
double saldo,k;
hebra = (int *) arg;