我有以下 Sinatra 小程序。它只是打印当前纪元时间,然后在返回之前休眠一秒钟:
require 'rubygems'
require 'sinatra'
get '/' do
Thread.new do
$mutex.synchronize do
stream do |out|
out << "\n" << Time.now.to_i
sleep 1
end
end
end.join
end
$mutex = Mutex.new
我希望互斥锁强制按顺序处理 Web 请求。但是,根据此测试,情况似乎并非如此:
$ for i in $(seq 5) ; do curl localhost:4567/ & disown; done
1378839480
1378839480
1378839480
1378839480
1378839480
如您所见,五个同时请求的结果都产生相同的纪元时间。
我究竟做错了什么?