Comparar i intercanviar
Comparar i intercanviar, també conegut per les sigles CAS (de l'anglés Compare And Swap), és una operació atòmica usada en el disseny d'algoritmes concurrents per a permetre la sincronisació de fils d'eixecució sense recórrer a bloquejos dels mateixos.[1]
Descripció
[editar | editar còdic]Bàsicament consistix en comparar el valor d'una variable en un valor esperat i, si el valor és l'esperat, llavors intercanvia el valor de la variable en el d'una atra variable. Tot açò realisat d'una forma atòmica. La atomicidad garantisa que el nou valor és calculat basat en informació actualisada; si entretant el valor ha segut actualisat per un atre fil d'eixecució, l'escritura fallarà, El resultat de l'operació té que indicar si es va realisar la substitució; açò pot ser realisat en una simple resposta booleana (a esta variant se li crida 'comparar i establir), o retornant el valor llegit de la memòria (no l'escrit).[2]
Més formalment podem definir l'algoritme de la següent forma:[2]
- Paràmetros d'entrada:
- Una localisació de memòria V a on el valor té que ser reemplaçat.
- Un valor vell Al qual va ser llegit pel fil l'última volta.
- Un nou valor B el qual deuria ser escrit sobre V
- Supongam que crec que V deuria tindre el valor A ya que té el valor B. Si V no té el valor B llavors no es deuria fer res i se'm deuria donar una resposta indicant-me que estava equivocat.
En resum, quan varis fils d'eixecució intenten actualisar la mateixa variable simultàneament usant CAS, un gana i actualisa el valor de la variable i el restant pert. Pero els perdedors no són sancionats en la suspensió del fil, ells són lliures de tornar a intentar realisar l'operació o simplement no fer res.[2]
La tècnica CAS és optimista ya que procedix en l'actualisació a l'espera de tindre èxit, no obstant pot haver fallo, que serà detectat, si un atre fil ha actualisat la variable des de que ell la va examinar per última volta.[2]
Eixemple
[editar | editar còdic]Supongam que V és una localisació de memòria a on està almagasenat el valor 10. Hi ha múltiples fils que volen incrementar este valor i usar el valor incrementat per a atres operacions. Supongam els següents passos:[2]
- Fils 1 i 2 volen realisar l'increment, lligen el valor i decidixen que volen incrementar-ho a 11.
- Fil 1 entra primer en CAS i compara V en l'últim valor llegit. Açò provocarà que el valor de V siga sobreescrito i es convertixca a 11
- Fil 2 entra en CAS i intenta realisar l'operació i esta falla tornant el valor 11
- Fil 2 decidix tornar a llegir i decidix incrementar a 12
- Fil 2 entra en CAS i actualisa el valor de la variable a 12.
Referències
[editar | editar còdic]- ↑ Understanding Atomic Operations. jfdube. 30 de novembre de 2011
- ↑ 2,0 2,1 2,2 2,3 2,4 Compare and Swap [CAS Algorithm]. Lokesh Gupta. 13 de juny de 2014
Referències
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Comparar e intercambiar» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.