Ruby中是否有原子变量,例如Java中的AtomicInteger
或AtomicBoolean
?Ruby是否有原子变量?
14
A
回答
9
Here is a gem可能会提供你所需要的(找到linked from here)。 The code is clean and compact enough to quickly understand(它基本上是一个Mutex,正如其他人所建议的那样),如果你想编写你自己的互斥包装器,它应该给你一个很好的起点。
甲轻轻改性从github例如:
require 'atomic'
my_atomic = Atomic.new('')
# set method 1:
my_atomic.update { |v| v + 'hello' }
# set method 2:
begin
my_atomic.try_update { |v| v + 'world' }
rescue Atomic::ConcurrentUpdateError => cue
# deal with it (retry, propagate, etc)
end
# access with:
puts my_atomic.value
1
我不认为Ruby有一个。但是,您可以使用模拟一个Mutex。
1
不是原生的,但可以使用Mutex
类获得一些原子性。
您可以实现自己的AtomicString
,例如,使用Mutex
。
3
应当指出的是,在互斥的方面实现原子类型击败使用“原子”的抽象的目的。
正确的原子实现发出利用CPU的比较和交换指令的代码。
2
使用互斥的建议,像这样:
i = 0
lock = Mutex.new
# Then whenever you want to modify it:
lock.synchronize do
i += 1
end
相关问题
- 1. 是否性病::原子防止非原子变量的重新排序在原子变量
- 2. 是否有动态变量不是私有的原因?
- 3. 在Ruby中是否有这样一个常量实例变量?
- 4. 原子变量是否能保证 - “发生在关系之前”?
- 5. 原子变量是否保证内存可见性?
- 6. 是否是imageStore原子?
- 7. MGET是否是原子?
- 8. 确定varname是否是因子变量
- 9. 检查是否变量是从UICollectionViewCell子
- 10. 是否有Makefile和变量
- 11. at_start是否有Ruby Cucumber测试钩子?
- 12. Dynamodb是否有原子脚本?
- 13. 是否有可能在MongoDB中进行原子批量更新?
- 14. 在Ruby中,Python是否有类似“string#{var}”的变量插值?
- 15. Ruby实例变量是否具有访问修饰符?
- 16. 是原子变量的多重赋值,是一个原子操作吗?
- 17. 是否写入SOCK_SEQPACKET原子?
- 18. SPLFileObject是否为原子?
- 19. Subversion是否提交原子?
- 20. 是否为WriteFile原子?
- 21. 是否有必要在UITableViewCell子类中拥有实例变量?
- 22. Ruby类变量是空
- 23. C++一个原子阵列是否也需要是原子的?
- 24. Cassandra中的批次突变是否是原子的?
- 25. 如何测试一个变量是否是原始的PHP
- 26. 什么是原子变量,它的用法是什么?
- 27. 组合原子和非原子变量和缓存
- 28. 用挥发性原子变量原子操作
- 29. C++ 11编译器是否允许引入额外的原子变量负载?
- 30. 是否有Ansible/Jinja2子组变量唯一过滤器?