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
