gpt4 book ai didi

ruby - 如何在 Ruby 中创建 Thread 的子类?

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:27 25 4
gpt4 key购买 nike

在C/C++中,当我们创建线程时,有一种机制可以将一些参数传递给线程执行体。在 java 中,我们可以子类化 Thread 类以允许线程类包含一些实例变量。在Ruby中,创建线程的方式是:

thread = Thread.new {
... code thread execution body
}

Thread.new之后,线程立即开始运行。我见过的所有代码都在线程体中使用了全局变量。假设我们需要一个互斥锁,代码是:

mutex = Mutex.new
thread = Thread.new {
... code thread execution body
mutex.synchronized {
... some code
}
}

是否可以创建Thread 的子类并允许它有一些实例变量?我无法弄清楚的技术问题是如何将代码块传递给子类以及子类如何将代码块传递给超 Thread 类。

最佳答案

概括地说,您要实现什么目标?

您不需要在 Ruby 中子类化 Thread。您传递给 Thread.new 的代码块将简单地在调用 Thread.new 的代码的上下文中执行,并且可以访问调用方法和调用类实例的实例变量。

class Dog
def initialize(name)
@name = name
end
def start_barking
Thread.new do
10.times do
puts "Woof! Woof! #{@name}!"
end
end
end
end

如果您正在寻找线程局部变量,您可以使用 Thread.current 特殊哈希。

10.times do |i|
Thread.new do
Thread.current[:i] = i
sleep 1
puts Thread.current[:i]
end
end

关于ruby - 如何在 Ruby 中创建 Thread 的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18455545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com