面试题答案
一键面试在Ruby中,为避免多线程访问和修改共享资源时的数据竞争,可使用以下同步机制:
- Mutex(互斥锁):确保同一时间只有一个线程可以访问共享资源。
- Semaphore(信号量):控制同时访问共享资源的线程数量。
- 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
释放锁,确保同一时间只有一个线程能操作共享资源,从而实现线程安全。