【发布时间】:2014-10-13 19:52:39
【问题描述】:
在多线程情况下,是否有可能在某个线程t1 内从另一个线程t2 在t1 之外运行?如果有,怎么做?
回复 Stefan:
我试过了:
def a; b end
def b; c end
def c; d end
def d; sleep(1) end
t1 = Thread.new do
100.times{a}
end
p t1.backtrace
但它总是返回一个空数组[]。
编辑:
根据 Stefan 的建议,以下参数适用于我的电脑:
def a; b end
def b; c end
def c; d end
def d; end
t1 = Thread.new do
1000.times{a}
end
sleep(0.0001)
p t1.backtrace
它返回一个随机调用堆栈,最顶层的方法在a 到d 之间变化。
【问题讨论】:
-
赞
t1.backtrace? -
@Stefan 我不知道你是否按预期得到了我的问题,但如果我按照上面的代码尝试,我总是得到空数组,而我希望一些随机调用堆栈涉及一些来自
a、b、c、d方法调用。 -
可能线程已经结束了,试试
def d; sleep; end -
@Stefan 是一样的。
-
看来你得等一会儿(
sleep 0.1)才能打电话给p t1.backtrace
标签: ruby multithreading callstack