ExpertiDict

Ruby · Intermediário · Inglês · Técnico

Mutex

/ˈmjuˌtɛks/substantivo

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  # => 400

Exemplos

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.

Veja também

Todos os termos de Ruby