初步讲解Ruby编程中的多线程

2019-09-25 09:45:37王振洲

使用ConditionVariable实现同步控制

使用 ConditonVariable进行同步控制,能够在一些致命的资源竞争部分挂起线程直到有可用的资源为止。

#encoding:gbk
require "thread"
puts "thread synchronize by ConditionVariable"
 
mutex = Mutex.new
resource = ConditionVariable.new
 
a = Thread.new {
  mutex.synchronize {
    # 这个线程目前需要resource这个资源
    resource.wait(mutex)
    puts "get resource"
  }
}
 
b = Thread.new {
  mutex.synchronize {
    #线程b完成对resourece资源的使用并释放resource
    resource.signal
  }
}
 
a.join
puts "complete"

mutex 是声明的一个资源,然后通过ConditionVariable来控制申请和释放这个资源。

b 线程完成了某些工作之后释放资源resource.signal,这样a线程就可以获得一个mutex资源然后进行执行。 执行结果:

thread synchronize by ConditionVariable
get resource
complete

线程类方法

完整的 Thread(线程) 类方法如下:


线程实例化方法

以下实例调用了线程实例化方法 join:

#!/usr/bin/ruby
 
thr = Thread.new do  # 实例化
  puts "In second thread"
  raise "Raise exception"
end
thr.join  # 调用实例化方法 join

以下是完整实例化方法列表:

2015410101902229.jpg (927×742)

2015410101949440.jpg (937×179)线程实例化方法

以下实例调用了线程实例化方法 join:

#!/usr/bin/ruby
 
thr = Thread.new do  # 实例化
  puts "In second thread"
  raise "Raise exception"
end
thr.join  # 调用实例化方法 join

以下是完整实例化方法列表:

2015410102030312.jpg (936×726)

2015410102049794.jpg (936×451)