From: eregontp@... Date: 2021-01-14T13:06:38+00:00 Subject: [ruby-core:102091] [Ruby master Feature#12607] Ruby needs an atomic integer Issue #12607 has been updated by Eregon (Benoit Daloze). There is also the well-known example of metrics in Sidekiq, and all these: https://github.com/search?l=Ruby&q=AtomicFixnum&type=Code > I really think a generator (like the above MyCounter.next) is a more appropriate tool than an atomic integer. And how do you implement that efficiently, and in a way that's thread-safe? To be clear, Enumerator.new {} is not efficient, so a generator is not good enough, and Fibers can't be resumed across threads. ko1 (Koichi Sasada) wrote in #note-26: > TVar proposed in https://bugs.ruby-lang.org/issues/17261 has `#increment` method and it is enough fast. I think that cannot be as efficient as an atomic integer. Reasoning: TVar#increment needs to also be atomic with other changes, including `Thread.atomically { tv.value = tv.value * 2 }`, for decent STM semantics. That implies extra tracking for TVar#increment besides just a single fetch-and-add, isn't it? For instance, it would be incorrect to execute that `atomically` block in parallel with the fetch-and-add (might result in the increment being lost). So TVar#increment needs to sync somehow with `Thread.atomically` and that's the overhead. ---------------------------------------- Feature #12607: Ruby needs an atomic integer https://bugs.ruby-lang.org/issues/12607#change-89948 * Author: shyouhei (Shyouhei Urabe) * Status: Feedback * Priority: Normal * Assignee: ko1 (Koichi Sasada) ---------------------------------------- (This one was derived from bug #12463) Although I don't think += would become atomic, at the same time I understand Rodrigo's needs of _easier_ counter variable that resists inter-thread tampering. I don't think ruby's Integer class can be used for that purpose for reasons (mainly because it is not designed with threads in mind). Rather we should introduce a integer class which is carefully designed. Why not import Concurrent::AtomicFixnum into core? -- https://bugs.ruby-lang.org/ Unsubscribe: