加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3 cattr_accessor线程安全吗?

发布时间:2020-12-17 02:35:21 所属栏目:百科 来源:网络整理
导读:Rails 3 cattr_accessor线程安全吗? 解决方法 不,这不对.快速查看cattr_reader代码: # File activesupport/lib/active_support/core_ext/class/attribute_accessors.rb,line 28def cattr_reader(*syms) options = syms.extract_options! syms.each do |sym
Rails 3 cattr_accessor线程安全吗?

解决方法

不,这不对.快速查看cattr_reader代码:

# File activesupport/lib/active_support/core_ext/class/attribute_accessors.rb,line 28
def cattr_reader(*syms)
  options = syms.extract_options!
  syms.each do |sym|
    class_eval(        unless defined? @@#{sym}          @@#{sym} = nil        end        def self.#{sym}          @@#{sym}        end,__FILE__,__LINE__ + 1)

    unless options[:instance_reader] == false
    class_eval(          def #{sym}            @@#{sym}          end,__LINE__ + 1)
    end
  end
end

你可以运行简单的测试:

class A
  cattr_accessor :b
end

t1 = Thread.new { A.b = 1;  sleep 1; p (A.b == 1); }
t2 = Thread.new { A.b = 2 }
t1.join
t2.join
# outputs "false"

这是一种让它在线程安全工作的方法:http://rails-bestpractices.com/posts/2010/08/23/fetch-current-user-in-models/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读