我想在我的 sinatra 应用程序中以线程安全的方式存储和更新枚举。我用独角兽。我尝试了以下方法:
#!/usr/bin/ruby
require 'sinatra'
$locked = false
$num = 0
class App < Sinatra::Base
before do
while $locked do end
$locked = true
end
after do
$locked = false
end
get "/wait" do
sleep 10
$num += 1
erb :display
end
get "/winner" do
$num += 1
erb :display
end
end
该视图仅显示 $num ;)
我用独角兽(4 个工人)启动了这个应用程序,并http://localhost:8080/winner
用我的浏览器访问了。我点击了几次刷新,但应用程序没有显示预期的行为(1,2,3,4,5,...)而是显示随机数(1,1,2,1,2,3, 2,3,2,3,4,...)
那么我如何获得这个线程安全的呢?:D(对不起我的英语不好)