You can clone with
@shorn = false
# Here the sheep owns the mutex. But now the
# shearing logic is muddied up by synchronization
# logic. This doesn't seem like the right place for
@mutex = Mutex.new
return if shorn?
@shorn = true
sheep = Sheep.new
# You could create the mutex here and let
# the threads fight over it before shearing
# the sheep, but it's just not necessary.