线程
可以使用 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 程序,使用多个线程计算数组中元素的和。
- 定义一个函数
parallel_sum(array, num_threads)
,该函数接受整数数组和线程数。该函数应返回数组中所有元素的和。- 使用
Thread
类创建多个线程进行并行处理。每个线程应负责对数组的一部分求和。
Loading...
> 此处输出代码运行结果