MST
星途 面试题库

面试题:Ruby线程与进程的同步控制

假设你正在开发一个多线程的Ruby程序,其中多个线程需要访问和修改共享资源,为了避免数据竞争,你会使用哪些同步机制?请举例说明如何使用其中一种机制实现线程安全。
31.6万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

在Ruby中,为避免多线程访问和修改共享资源时的数据竞争,可使用以下同步机制:

  1. Mutex(互斥锁):确保同一时间只有一个线程可以访问共享资源。
  2. Semaphore(信号量):控制同时访问共享资源的线程数量。
  3. Condition Variable(条件变量):用于线程间的通信与同步,让线程在特定条件满足时被唤醒。

以下以Mutex为例说明如何实现线程安全:

require 'thread'

# 创建一个互斥锁
mutex = Mutex.new
# 共享资源
shared_variable = 0

# 创建多个线程
threads = Array.new(10) do
  Thread.new do
    mutex.lock
    begin
      # 访问和修改共享资源
      shared_variable += 1
      puts "Thread #{Thread.current.object_id} incremented shared_variable to #{shared_variable}"
    ensure
      mutex.unlock
    end
  end
end

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

在上述代码中,通过Mutex类创建了一个互斥锁mutex。每个线程在访问和修改shared_variable这个共享资源前,先调用mutex.lock获取锁,操作完成后使用mutex.unlock释放锁,确保同一时间只有一个线程能操作共享资源,从而实现线程安全。