Ruby · Intermediário · Inglês · Técnico
Mutex
Trava de exclusão mútua da biblioteca padrão. Com synchronize, só uma thread por vez executa o bloco, evitando condições de corrida em dados compartilhados.
Onde usar
Aparece ao atualizar contadores, caches e hashes compartilhados entre threads. Mesmo com o GVL, operações compostas como += não são atômicas.
Em código
m = Mutex.new
t = 0
work = proc do
100.times { m.synchronize { t += 1 } }
end
ts = 4.times.map { Thread.new(&work) }
ts.each(&:join)
p t # => 400Exemplos
Wrap the counter update in a mutex.
Envolva a atualização do contador em um mutex.
A mutex isn't reentrant, so it can deadlock itself.
Um mutex não é reentrante, então pode travar a si mesmo.
Cuidado
Não o trave de novo dentro dele mesmo na mesma thread: o Mutex não é reentrante e lança ThreadError; para isso existe o Monitor.
Sinônimos
trava
Origem
Abreviação de mutual exclusion, exclusão mútua.