客观的
fork
使用 Ruby 的方法和几个工人增加一个计数器
免责声明
- 我不想为此使用任何外部依赖项
- 不允许使用Ruby 的
Thread
类 - 我想看看这是否可以使用
fork
这是一个小的共享内存模拟
class Memory
def self.address= value
@value = value
end
def self.address
@value
end
end
这是我的工人
class Worker
def initialize mutex
@mutex = mutex
end
def work
@mutex.synchronize do
print "begin: %d " % (tmp=Memory.address)
sleep 0.05
print "end: %d \n" % (Memory.address = tmp + 1)
end
end
end
让我们运行它
# init
Memory.address = 0
mutex = Mutex.new
# create workers
workers = []
10.times do
workers << fork do
Worker.new(mutex).work
end
end
# wait for workers to finish
Process.waitall
输出
begin: 0 begin: 0 begin: 0 begin: 0 begin: 0 begin: 0 begin: 0 begin: 0 begin: 0 begin: 0 end: 1
end: 1
end: 1
end: 1
end: 1
end: 1
end: 1
end: 1
end: 1
end: 1
预期产出
begin: 0 end: 1
begin: 1 end: 2
begin: 2 end: 3
begin: 3 end: 4
begin: 4 end: 5
begin: 5 end: 6
begin: 6 end: 7
begin: 7 end: 8
begin: 8 end: 9
begin: 9 end: 10
附带问题:
- 我应该使用单个互斥锁吗?
- 每个工人创建自己的互斥体是否重要?