Si está escribiendo una aplicación de subprocesos múltiples que usa llamadas de sistema/biblioteca que utilizan errno para indicar el tipo de error, ¿existe una forma segura de usar errno? Si no, ¿hay alguna otra manera de indicar el tipo de error que ocurrió en lugar de simplemente que se haya producido un error?¿Hay alguna manera de usar errno de forma segura en una aplicación de subprocesos múltiples?
33
A
Respuesta
34
Si su biblioteca estándar es multithread consciente, entonces probablemente tiene un #define
que cambia errno
en una llamada a función que devuelve un valor de retorno de error local de subproceso. Sin embargo, para usar esto generalmente debe incluir <errno.h>
, en lugar de confiar en una declaración extern
.
Encontré un artículo Thread-safety and POSIX.1 que responde a esta pregunta.
16
man errno
dice:
errno se define por la norma ISO C ser un lvalue modificable de tipo int, y no debe ser explícitamente declarado; errno puede ser una macro. errno es thread-local; establecerlo en un único subproceso no afecta a su valor en cualquier otro hilo.
Cuestiones relacionadas
- 1. Depuración de una aplicación de subprocesos múltiples
- 2. ¿Hay alguna manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
- 3. ¿Hay alguna forma de fundición "tipo segura" en Java?
- 4. iOS: ¿Hay alguna manera de eliminar archivos específicos de forma segura del sistema de archivos?
- 5. ¿Hay alguna forma o herramienta que pueda usar para verificar si mi API es segura para subprocesos en Java?
- 6. ¿Cómo usar mkdirs de una manera segura para subprocesos en Java?
- 7. ¿Hay alguna forma de eliminar archivos de manera segura en aws?
- 8. ¿Hay alguna forma de devolver resultados múltiples con una subconsulta?
- 9. punteros que regresan de una manera segura para los subprocesos
- 10. ¿Cómo encontrar una aplicación de subprocesos múltiples?
- 11. ¿Hay alguna forma de usar `exec` en una cláusula where?
- 12. ¿Hay alguna manera de resaltar búsquedas múltiples en (g) Vim?
- 13. ¿Hay alguna manera de usar ConcurrentDictionary.TryUpdate con una expresión lambda?
- 14. ¿Hay alguna forma de usar TransactionScope con una conexión existente?
- 15. ¿Hay una forma segura de ejecutar eval en Ruby?
- 16. ¿Hay alguna forma de crear múltiples activadores en un script?
- 17. En Windows, ¿hay alguna forma de convertir un errno en un HRESULT?
- 18. ¿Hay alguna manera de programar de forma interactiva una aplicación Python curses?
- 19. ¿Hay alguna manera de usar variables locales en los módulos?
- 20. En Heroku, ¿hay alguna forma de agregar múltiples anzuelos HTTP?
- 21. ¿Hay alguna forma de modularizar una aplicación JavaFX?
- 22. ¿Hay alguna manera de agregar múltiples receptores en Python SMTPlib?
- 23. ¿Hay una implementación de grupo de objetos C++ segura y segura para subprocesos?
- 24. ¿Hay alguna forma de actualizar automáticamente la aplicación en Android?
- 25. ¿Hay alguna manera de declarar una variable que implementa múltiples interfaces en .Net?
- 26. ¿Hay alguna manera de pausar una CABasicAnimation?
- 27. Aplicación WPF de subprocesos múltiples: invocación de despachador. Una forma más eficiente?
- 28. ¿Hay alguna manera de detectar lectores abiertos en una SqlConnection?
- 29. ¿Hay alguna manera de desactivar una etiqueta?
- 30. ¿Hay alguna manera de ejecutar la aplicación GUI de forma sin cabeza en Mac?
Gracias! Una comprobación rápida en /usr/include/bits/errno.h confirmó que errno está definido para ser por subproceso cuando se usan subprocesos, en mi máquina Ubundu. –