2012-02-01 11 views
5

Cuando quiero hacer referencia al hilo actual dentro del entorno de un hilo, varias estrategias parecen funcionar:cómo hacer referencia a la hebra actual

  • t = Thread.new{p t}
  • Thread.new{|t| p t}
  • Thread.new{p Thread.current}
  • Thread.new{p self}

¿Son todas equivalentes? ¿Hay alguna razón para elegir una sobre las otras en un contexto específico?

+0

im raro encontrar 'self' duerma referirse a la rosca:' Thread.new {p} .join' auto impresiones 'main' – AJcodez

Respuesta

3

self solo funcionará si lo llamas directamente dentro del bloque pasado a Thread.new, no si lo llamas desde dentro de un método en otra clase que se ejecuta en ese hilo. Si usa el enfoque Thread.new { |t| p t}, tendrá que pasar t si desea utilizarlo dentro de otros métodos que se ejecutan en ese hilo. Pero Thread.current funciona sin importar desde dónde lo llame.

Usaría Thread.current, porque hace que sea obvio lo que le está haciendo a cualquiera que lea el código. Es posible que algunos lectores no sepan que si el bloque Thread.new toma un parámetro, el nuevo hilo pasará a ese parámetro. self puede no ser 100% claro tampoco. Pero cualquier lector debe poder comprender inmediatamente lo que significa Thread.current.

0

Además de la respuesta de Alex, noté que se debe evitar t = Thread.new{p t}. En algunos casos, cuando se ejecuta el sub-subproceso es rápido, la asignación a la variable t en el subproceso principal puede no realizarse al momento de su llamada dentro del subtítulo, en cuyo caso, t no está definido (devolviendo nil) o es algo más.

0

La respuesta corta es: Thread.current es el enfoque más común para obtener hilo actual

Cuestiones relacionadas