» Ruby快速入门 » 2. 高级篇 » 2.5 线程

线程

可以使用 Thread 类来实现线程。

线程创建

# 创建并运行两个线程
thread1 = Thread.new { puts "Thread 1 running" }
thread2 = Thread.new { puts "Thread 2 running" }

# 等待两个线程完成
thread1.join
thread2.join

puts "Main thread exiting"

线程传递参数

# 创建并运行带参数的线程
thread = Thread.new("Hello", "Literank") do |greeting, target|
  puts "#{greeting}, #{target}!"
end

# 等待线程完成
thread.join

puts "Main thread exiting"

Mutex 同步

# 使用 Mutex 进行同步
counter = 0
mutex = Mutex.new

# 安全递增计数器的函数
def increment_counter(mutex, counter)
  1000.times do
    mutex.synchronize do
      counter += 1
    end
  end
  counter
end

# 创建并运行两个递增计数器的线程
thread1 = Thread.new { counter = increment_counter(mutex, counter) }
thread2 = Thread.new { counter = increment_counter(mutex, counter) }

# 等待两个线程完成
thread1.join
thread2.join

puts "Counter value: #{counter}"
puts "Main thread exiting"

线程池

# 使用线程池并行执行
pool_size = 3
tasks = Queue.new

# 将任务加入队列
10.times { |i| tasks << i }

# 工作线程函数
def worker(tasks)
  until tasks.empty?
    task = tasks.pop(true) rescue nil
    if task
      puts "Task #{task} processed by thread #{Thread.current.object_id}"
      sleep(0.3) # Simulate some work
    end
  end
end

# 在线程池中创建并运行线程
threads = Array.new(pool_size) do
  Thread.new { worker(tasks) }
end

# 等待所有线程完成
threads.each(&:join)

puts "Main thread exiting"

代码挑战

编写一个 Ruby 程序,使用多个线程计算数组中元素的和。

  1. 定义一个函数 parallel_sum(array, num_threads) ,该函数接受整数数组线程数。该函数应返回数组中所有元素的和。
  2. 使用 Thread 类创建多个线程进行并行处理。每个线程应负责对数组的一部分求和。
Loading...
> 此处输出代码运行结果
上页
下页