Concurrencia - Se acceden a variables concurrentemente

Concurrencia - Se acceden a variables concurrentemente

de Leonardo Javier Henderson Freitas -
Número de respuestas: 2

Hola, que tal? Una pregunta,

Se puede leer y escribir una misma variable por parte de dos procesos concurrentes?

Porque por un lado, por lo visto en el algoritmo de lectores y escritores, leer y leer si puede pero leer y escribir no se podia segun aprendi.
Pero por otro lado estudiando el algoritmo de la panaderia de lamport veo que un proceso despues de calcular su turno, cuando lo guarda en una variable turno, esta variable al mismo tiempo puede a su vez ser leida por otro proceso para calcular su turno, y otros algoritmos tambien, como dekker donde un proceso escribe su bandera (la levanta) y otros pueden estar leyendola a la vez para decidir si ya entrar a la seccion critica o no.

Sospecho que es porque las asignaciones (como: "flagA:=true" en dekker) son atomicas, entonces funcionan igual, mientras que escribir un registro de multiples bytes (como en lectores y escritores) no lo es. Es asi?

En caso de ser esta la razon, como se cuales instrucciones son atomicas y cuales no? Gracias!

En respuesta a Leonardo Javier Henderson Freitas

Re: Concurrencia - Se acceden a variables concurrentemente

de Jorge Merlino -

Como poder se puede, el problema es que en general si hay varios procesos leyendo y escribiendo no hay ninguna garantía de que si en una instrucción leíste que la variable x vale 1 esto siga siendo cierto en la instrucción siguiente. Este comportamiento en general se asume cuando se hace algo así como:

if (x == 1)
hago algo porque asumo que x todavía vale 1

Si armás el código con cuidado (ej. dekker) esto no te va a pasar y te puede funcionar. De todas maneras en el contexto del curso la idea es que uses las herramientas de concurrencia para asegurar que esto no pase y que además no haya busy waiting como en dekker.