Hola gente!

Hoy, mientras leia el Smalltalk-80 the language and its implementation en
el desayuno, se me ocurrio pensar:

Como hace un Smalltalk para hacer un become: si hay multithreading (es
decir, si hay varios threads ejecutandose)?
Pues me imagino que mientras se hace

a become: b

alguno otro thread puede estar operando con b o con a (por ejemplo, tomo la
clase de b ANTES del become, lookup de un metodo, y luego lo aplica a b
DESPUES del become)
(o, si la implementacion interna es un object table (una celda por objeto),
accedo a la celda de b, tomo algo de la celda (por ejemplo, el puntero a la
clase), y mientras me cambian la celda, donde esta el puntero al resto de
los datos)
(tambien me puedo imaginar una implementacion por object table (una celda
por objeto), donde haya menos cosas que confundan a un become: a medio
hacer; por ejemplo, que tenga apenas el puntero al contenido del objeto, y
ahi en el contenido este el puntero a la clase).

Bueno, no se si me explico ..

Tienen idea?

Me imagino respuestas:

- No, los Smalltalks X, Y, Z solo manejan un thread, y todo lo demas son
"green threads"
- En el Smalltalk W, hacemos become: multithreading, pero sin controlar
nada (sin poner locks, semaforos o lo que sea)
- En el Smalltalk T, tenemos multithread y hacemos un lindo bolonki para
hacer que el become: sea thread-safe
- En el Smalltalk S, tenemos multithread y la implementacion interna
(object table con celda atomica, con pocos datos; o puntero directo, o lo
que sea) es tal, que el become termina siendo thread-safe por naturaleza

Cual es?

Nos leemos!

Angel "Java" Lopez
@ajlopez

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a