在Ruby线程子类中,在超级块内部和外部分配变量有什么区别?
如果我有这样的课在Ruby线程子类中,在超级块内部和外部分配变量有什么区别?,ruby,multithreading,Ruby,Multithreading,如果我有这样的课 class CustomThread < Thread def initialize @outside = [] super do @inside = [] end end def push(value) @outside.push(value) @inside.push(value) end end class CustomThread
class CustomThread < Thread
def initialize
@outside = []
super do
@inside = []
end
end
def push(value)
@outside.push(value)
@inside.push(value)
end
end
class CustomThread
@外部
与@内部
的行为有什么区别?如何确定在超级块外部和内部分配哪些变量?super
从父类调用相同的方法。因此,您正在调用线程#initialize
并传递一个在内部分配@的块。代码告诉我们,这将创建一个执行给定块的新线程
因此,不同之处在于,当创建自定义线程时,@外部
被分配,而@内部
在线程运行后的某个点被分配。这是一个竞赛条件:
CustomThread.new.push_value 0
因为@inside
可能没有在推送值尝试推送到它时分配。为了安全地使用它,您必须
thread = CustomThread.new
thread.join
thread.push_value 0
super
从父类调用相同的方法。因此,您正在调用线程#initialize
并传递一个在内部分配@的块。代码告诉我们,这将创建一个执行给定块的新线程
因此,不同之处在于,当创建自定义线程时,@外部
被分配,而@内部
在线程运行后的某个点被分配。这是一个竞赛条件:
CustomThread.new.push_value 0
因为@inside
可能没有在推送值尝试推送到它时分配。为了安全地使用它,您必须
thread = CustomThread.new
thread.join
thread.push_value 0