set_thread_safe
đ ThreadâSafe Sets with concurrentârubyâ
Rubyâs Set
isnât threadâsafe by default. For multiâthreaded environments, use Concurrent::Set
from the concurrentâruby
gem. It provides atomic add?
, delete?
, and lockâfree reads to avoid race conditions.
# Add to your Gemfile:
# gem 'concurrent-ruby'
require 'concurrent'
# Create a thread-safe set
safe_set = Concurrent::Set.new([1,2,3])
threads = 10.times.map do |i|
Thread.new do
100.times do |j|
safe_set.add?(i*100 + j)
end
end
end
threads.each(&:join)
puts safe_set.size
# => 1000 # All adds completed without locks or races
# Atomic delete? returns true if element was present
puts safe_set.delete?(42) ? 'Removed' : 'Not present'