57 lines
1.6 KiB
Markdown
57 lines
1.6 KiB
Markdown
|
# Threadsafe
|
||
|
|
||
|
[![Build Status](https://travis-ci.org/headius/thread_safe.png)](https://travis-ci.org/headius/thread_safe)
|
||
|
|
||
|
A collection of thread-safe versions of common core Ruby classes.
|
||
|
|
||
|
## Installation
|
||
|
|
||
|
Add this line to your application's Gemfile:
|
||
|
|
||
|
gem 'thread_safe'
|
||
|
|
||
|
And then execute:
|
||
|
|
||
|
$ bundle
|
||
|
|
||
|
Or install it yourself as:
|
||
|
|
||
|
$ gem install thread_safe
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
```ruby
|
||
|
require 'thread_safe'
|
||
|
|
||
|
sa = ThreadSafe::Array.new # supports standard Array.new forms
|
||
|
sh = ThreadSafe::Hash.new # supports standard Hash.new forms
|
||
|
```
|
||
|
|
||
|
`ThreadSafe::Cache` also exists, as a hash-like object, and should have
|
||
|
much better performance characteristics esp. under high concurrency than
|
||
|
`ThreadSafe::Hash`. However, `ThreadSafe::Cache` is not strictly semantically
|
||
|
equivalent to a ruby `Hash` -- for instance, it does not necessarily retain
|
||
|
ordering by insertion time as `Hash` does. For most uses it should do fine
|
||
|
though, and we recommend you consider `ThreadSafe::Cache` instead of
|
||
|
`ThreadSafe::Hash` for your concurrency-safe hash needs. It understands some
|
||
|
options when created (depending on your ruby platform) that control some of the
|
||
|
internals - when unsure just leave them out:
|
||
|
|
||
|
|
||
|
```ruby
|
||
|
require 'thread_safe'
|
||
|
|
||
|
cache = ThreadSafe::Cache.new
|
||
|
```
|
||
|
|
||
|
## Contributing
|
||
|
|
||
|
1. Fork it
|
||
|
2. Clone it (`git clone git@github.com:you/thread_safe.git`)
|
||
|
3. Create your feature branch (`git checkout -b my-new-feature`)
|
||
|
4. Build the jar (`rake jar`) NOTE: Requires JRuby
|
||
|
5. Install dependencies (`bundle install`)
|
||
|
6. Commit your changes (`git commit -am 'Added some feature'`)
|
||
|
7. Push to the branch (`git push origin my-new-feature`)
|
||
|
8. Create new Pull Request
|