0
0
Rubyprogramming~20 mins

Thread safety concepts in Ruby - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Thread Safety Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of thread increment without synchronization
What is the output of this Ruby code that increments a shared counter from multiple threads without any synchronization?
Ruby
counter = 0
threads = []
10.times do
  threads << Thread.new do
    1000.times { counter += 1 }
  end
end
threads.each(&:join)
puts counter
AA number greater than 10000
B10000
CRaises a runtime error
DA number less than 10000
Attempts:
2 left
💡 Hint
Think about what happens when multiple threads update the same variable without locks.
🧠 Conceptual
intermediate
1:30remaining
Understanding Mutex usage in Ruby
Why do we use a Mutex in Ruby when working with threads?
ATo allow multiple threads to access a resource simultaneously
BTo speed up thread execution by skipping locks
CTo prevent multiple threads from accessing a shared resource at the same time
DTo automatically create new threads
Attempts:
2 left
💡 Hint
Think about what happens if two threads try to change the same data at once.
🔧 Debug
advanced
2:30remaining
Identify the cause of inconsistent output in threaded code
This Ruby code uses threads to append to an array. Why might the final array length be less than expected?
Ruby
arr = []
threads = []
5.times do
  threads << Thread.new do
    100.times { arr << 1 }
  end
end
threads.each(&:join)
puts arr.length
ABecause Array#<< is not thread-safe and can cause lost updates
BBecause threads are not started properly
CBecause the array is frozen and cannot be modified
DBecause the join method is not waiting for threads
Attempts:
2 left
💡 Hint
Consider if appending to an array is safe when multiple threads do it at once.
📝 Syntax
advanced
2:00remaining
Identify the syntax error in thread synchronization code
Which option contains a syntax error in Ruby code that uses a Mutex to synchronize threads?
Ruby
mutex = Mutex.new
counter = 0
threads = []
10.times do
  threads << Thread.new do
    mutex.synchronize do
      counter += 1
    end
  end
end
threads.each(&:join)
puts counter
Amutex.synchronize counter += 1 end
Bmutex.synchronize do counter += 1 end
Cmutex.synchronize { counter += 1 }
D
mutex.synchronize do
  counter += 1
end
Attempts:
2 left
💡 Hint
Check the syntax of the block passed to synchronize.
🚀 Application
expert
3:00remaining
Determine the final value of a shared variable with thread-safe increments
Given this Ruby code using a Mutex to safely increment a shared counter from multiple threads, what is the final value of counter?
Ruby
counter = 0
mutex = Mutex.new
threads = []
20.times do
  threads << Thread.new do
    500.times do
      mutex.synchronize { counter += 1 }
    end
  end
end
threads.each(&:join)
puts counter
ARaises a deadlock error
B10000
CGreater than 10000 due to double increments
DLess than 10000 due to race conditions
Attempts:
2 left
💡 Hint
Mutex ensures increments happen one at a time without loss.