counter_safe

0.1.0 released

counter_safe

Thread safe counters:

Based on and with much thanks to: https://itnext.io/comparing-crystals-concurrency-with-that-of-go-part-ii-89049701b1a5

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      counter_safe:
        github: your-github-user/counter_safe
    
  2. Run shards install ... or shards install --ignore-crystal-version

Usage

require "counter_safe"

Example Usage:

  • Shared counters

    cs1 = CounterSafe::Shared.new
    cs2 = CounterSafe::Shared.new
    (1..1000).each {
      rand < 0.25 ? spawn cs1.inc("someKey") : spawn cs2.inc("someKey")
    }
    
    sleep 1.second
    puts cs1.value("someKey")
    puts cs2.value("someKey") #=> Should be the same as 'cs1.value("someKey")'
    
  • Exclusive counters

    ce1 = CounterSafe::Exclusive.new
    ce2 = CounterSafe::Exclusive.new
    (1..1000).each {
      rand < 0.25 ? spawn ce1.inc("someKey") : spawn ce2.inc("someKey")
    }
    puts ce1.value("someKey")
    puts ce2.value("someKey") #=> Should be DIFFERENT than as 'cs1.value("someKey")'
    

See also API doc's at: https://drhuffman12.github.io/counter_safe

Contributing

  1. Fork it (https://github.com/your-github-user/counter_safe/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

counter_safe:
  github: drhuffman12/counter_safe
  version: ~> 0.1.0
License MIT
Crystal none

Authors

Dependencies 0

Development Dependencies 2

  • faker
    {'github' => 'askn/faker'}
  • spectator~drhuffman drhuffman12/bump_crystal_version_to_0_36_0b
    {'branch' => 'drhuffman12/bump_crystal_version_to_0_36_0b', 'github' => 'drhuffman12/spectator'}

Dependents 1

Last synced .
search fire star recently