/ / ¿Cómo hacer que un hilo desbloquee el mutex bloqueado por otro hilo? - Ruby, Mutex

¿Cómo hacer que un hilo desbloquee el mutex bloqueado por otro hilo? - Ruby, Mutex

Tengo varios hilos y un mutex. Un hilo puede bloquear este mutex y quiero que otro hilo desbloquee este mutex, pero se produce el siguiente error:

Attempt to unlock a mutex which is locked by another thread

¿Cómo puedo ignorar este error? ¿O tiene otra solución?

Editar

Tengo varios hilos que harán un trabajo. Cuando el primer hilo comienza a hacer el trabajo, bloquea el mutex. Otros pueden aparecer y comenzar a hacer el mismo trabajo. Después del último hilo (provavelemnte, no el primero) para finalizar el trabajo, debe desbloquear el mutex.

Por lo tanto, el primer hilo bloquea el mutex y el último hilo se desbloquea.

Respuestas

0 para la respuesta № 1

Mutex es la abreviatura de exclusión mutua. Eso significa que cuando un hilo toma el trabajo y bloquea su mutex, Otros hilos no deben tocarloy, de hecho, se supone que deben bloquearse hasta que se libere el mutex (por el hilo que lo bloqueó).

Ya que parece querer operar en el trabajo conal mismo tiempo, no tengo idea de lo que está tratando de hacer con el mutex. Hasta que no aclare su caso de uso, no puedo sugerirle una alternativa adecuada. :-(


0 para la respuesta № 2

Realizar el rescate de ThreadError por bloque, que desbloquear Mutex Me gusta esto:

begin
m.unlock
rescue ThreadError => e
puts "Nothing todo"
end

Pero tenga cuidado: ThreadError Se puede elevar como resultado de otras operaciones relacionadas con hilos. Y debe estar seguro de que el rescate no bloquea la lógica del programa.