2011-06-09 17 views
7

realmente estoy preguntando por qué todos los códigos fuente que implementan una pthread_mutex_lock Nunca probar su valor de retorno como se define:pthread_mutex_lock retorno no probados

documentation of pthread

incluso en libros de los ejemplos no prueban si el candado está en error, los códigos solo hacen el candado.

¿Hay alguna razón por la que me perdí para dejarla sin probar?

Respuesta

3

Básicamente, el único error "interesante" es EINVAL, que en la mayoría de los programas solo ocurrirá debido a daños en la memoria o, como sé por mi dolorosa experiencia, durante el apagado del programa después de que los destructores ya hayan destruido algunos mutexes. De la forma en que lo veo, la única respuesta razonable a dicho error es abortar el programa, lo que, por otro lado, es muy inconveniente si los errores ocurren precisamente porque el programa ya se está cerrando. Por supuesto, esto se puede resolver, pero no es tan simple, y no se gana mucho con la mayoría de los programas.

+0

¿Entonces no maneja la corrupción de mem? – dlewin

+5

No, no "maneja" la corrupción de memoria, simplemente no corrompe la memoria en primer lugar. – Ringding

+1

En realidad, mi pregunta era más sobre EBUSY o EDEADLK, respectivamente: "No se pudo adquirir el mutex porque ya estaba bloqueado" y "Se detectó una condición de interbloqueo o el hilo actual ya posee el mutex": ¿qué te hace pensar esto no puede pasar? – dlewin

1

En primer lugar, creo que "todo el código fuente" y "nunca probar" son demasiado fuertes. Creo que "algunos" y "a menudo" serían más precisos.

En los libros, a menudo se omite el código de comprobación de errores para mayor claridad de la exposición.

En cuanto al código del mundo real, supongo que la respuesta debe ser que se perciba que la probabilidad de falla es muy baja. Si esto es una buena suposición es discutible.

+0

Estoy de acuerdo en el formulario que no tengo para la sustancia ya que "algunas" y "a menudo" también son ideas subjetivas. Lo que quise decir es que "la mayoría" de las veces el código y los ejemplos proporcionados no incluyen el retorno para ese tipo de función – dlewin

Cuestiones relacionadas