Является ли Rails 3 cattr_accessor потокобезопасным?Является ли Rails 3 cattr_accessor потокобезопасным?
3
A
ответ
2
Нет, это не так. Просто получить быстрый взгляд на код 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, __FILE__, __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/
2
Любая модификация переменных на уровне класса не может быть безопасным, поскольку вы делите состояние на уровне, к которому может быть изменен любой поток.
So cattr_accessor
, mattr_accessor
, @@var
и $var
НЕ являются безопасными для резьбы.
Смежные вопросы
- 1. cattr_accessor in Rails?
- 2. Является ли код потокобезопасным?
- 3. Является ли NSIndexPath потокобезопасным?
- 4. Является ли pysnmp потокобезопасным?
- 5. Является ли libgcrypt потокобезопасным?
- 6. Является ли HashBiMap потокобезопасным?
- 7. Является ли ResteasyClient потокобезопасным?
- 8. Является ли EPiServer потокобезопасным?
- 9. Является ли это потокобезопасным?
- 10. Является ли JMapViewer потокобезопасным?
- 11. Является ли XMLInputFactory потокобезопасным?
- 12. Является ли фильтр потокобезопасным
- 13. Является ли JsonMessageConverter потокобезопасным?
- 14. Является ли PHP потокобезопасным?
- 15. Является ли NashornScriptEngine потокобезопасным?
- 16. Является ли HippoMocks потокобезопасным?
- 17. Является ли DWScript потокобезопасным?
- 18. Является ли ValueExpression потокобезопасным?
- 19. Является ли RequestContextHolder потокобезопасным?
- 20. Является ли PipelineModel потокобезопасным?
- 21. Является ли MapsInitializer.initialize() потокобезопасным?
- 22. Является ли NSPasteboard потокобезопасным?
- 23. Является ли createTempFile потокобезопасным?
- 24. Является ли HttpContext.Current.Cache потокобезопасным?
- 25. Является ли github3py потокобезопасным?
- 26. Является ли log4j потокобезопасным?
- 27. Является ли PrintWriter потокобезопасным?
- 28. Является ли BlobstoreService потокобезопасным?
- 29. Является ли OracleDataSource.getConnection потокобезопасным?
- 30. Является ли udev потокобезопасным?