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 № 1Mutex 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.