Module: StateMachines::AsyncMode::ThreadSafeState
- Defined in:
- lib/state_machines/async_mode/thread_safe_state.rb
Overview
Thread-safe state operations for async-enabled state machines Uses concurrent-ruby for enterprise-grade thread safety
Instance Method Summary collapse
- 
  
    
      #marshal_dump  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Handle marshalling by excluding the mutex (will be recreated when needed). 
- 
  
    
      #marshal_load(data)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Restore marshalled object, mutex will be lazily recreated when needed. 
- 
  
    
      #read_state_safely(machine, attribute, ivar = false)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Thread-safe version of state reading Ensures atomic read operations across concurrent threads. 
- 
  
    
      #state_machine_mutex  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Gets or creates a reentrant mutex for thread-safe state operations on an object Each object gets its own mutex to avoid global locking Uses Concurrent::ReentrantReadWriteLock for better performance. 
- 
  
    
      #write_state_safely(machine, attribute, value, ivar = false)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Thread-safe version of state writing Ensures atomic write operations across concurrent threads. 
Instance Method Details
#marshal_dump ⇒ Object
Handle marshalling by excluding the mutex (will be recreated when needed)
| 32 33 34 35 36 | # File 'lib/state_machines/async_mode/thread_safe_state.rb', line 32 def marshal_dump # Get instance variables excluding the mutex vars = instance_variables.reject { |var| var == :@_state_machine_mutex } vars.map { |var| [var, instance_variable_get(var)] } end | 
#marshal_load(data) ⇒ Object
Restore marshalled object, mutex will be lazily recreated when needed
| 39 40 41 42 43 44 | # File 'lib/state_machines/async_mode/thread_safe_state.rb', line 39 def marshal_load(data) data.each do |var, value| instance_variable_set(var, value) end # Don't set @_state_machine_mutex - let it be lazily created end | 
#read_state_safely(machine, attribute, ivar = false) ⇒ Object
Thread-safe version of state reading Ensures atomic read operations across concurrent threads
| 17 18 19 20 21 | # File 'lib/state_machines/async_mode/thread_safe_state.rb', line 17 def read_state_safely(machine, attribute, ivar = false) state_machine_mutex.with_read_lock do machine.read(self, attribute, ivar) end end | 
#state_machine_mutex ⇒ Object
Gets or creates a reentrant mutex for thread-safe state operations on an object Each object gets its own mutex to avoid global locking Uses Concurrent::ReentrantReadWriteLock for better performance
| 11 12 13 | # File 'lib/state_machines/async_mode/thread_safe_state.rb', line 11 def state_machine_mutex @_state_machine_mutex ||= Concurrent::ReentrantReadWriteLock.new end | 
#write_state_safely(machine, attribute, value, ivar = false) ⇒ Object
Thread-safe version of state writing Ensures atomic write operations across concurrent threads
| 25 26 27 28 29 | # File 'lib/state_machines/async_mode/thread_safe_state.rb', line 25 def write_state_safely(machine, attribute, value, ivar = false) state_machine_mutex.with_write_lock do machine.write(self, attribute, value, ivar) end end |