En un comentario sobre la cuestión Automatically release mutex on crashes in Unix en 2010, Jilles afirmó: mutex robustosCondición de carrera en glibc/NPTL/Linux mutexes robustos?
de glibc son tan rápido porque glibc toma atajos peligrosos. No hay garantía de que el mutex todavía exista cuando el kernel lo marque como "causará EOWNERDEAD". Si el mutex fue destruido y la memoria reemplazada por un archivo mapeado de memoria que contiene la última identificación del hilo propietario en el lugar correcto y el último hilo propietario termina justo después de escribir la palabra de bloqueo (pero antes de eliminar completamente el mutex de su lista de mutexes propios), el archivo está dañado. Los mutexes robustos de Solaris y Will-be-FreeBSD9 son más lentos porque no quieren tomar este riesgo.
No puedo entender el reclamo, ya que destruir un mutex no es legal a menos que esté desbloqueado (y por lo tanto no en la lista robusta de ningún hilo). Tampoco puedo encontrar ninguna referencia buscando tal error/problema. ¿El reclamo era simplemente erróneo?
La razón por la que pregunto y estoy interesado es porque esto es relevante para la corrección de mi propia implementación basada en la misma primitiva robusta-mutex de Linux.
omg, el nombre del error tiene NERD en él –
Parece que el viejo enfoque basado en VMA tenía algunos problemas al menos; http://www.kernel.org/doc/Documentation/robust-futexes.txt. Sin embargo, si lo leo correctamente, la lista se mantiene en la memoria de espacio de usuario, entonces, ¿qué debe hacer si esa memoria está dañada? Aunque tal vez solo pueda ser visto como un caso especial de corrupción de la memoria compartida. – nos
Sí, veo que la lista o incluso los contenidos mutex podrían corromperse si el proceso se ejecuta de forma frenética y los corta. ¿Este es el problema que se describe? No me preocupa garantizar un comportamiento adecuado cuando un proceso con acceso al mutex ha invocado un comportamiento indefinido; Solo estoy preocupado por la posibilidad de alguna condición de carrera en el uso bien definido del mutex robusto. –