Estoy trabajando en un proyecto que tiene muchos subprocesos múltiples, y me preguntaba si hay una forma de que el compilador marque el uso de las llamadas no reentrantes a la biblioteca C (por ejemplo, strtok intsead of strtok_r)? Si no, ¿hay una lista de llamadas que no son reentrantes, así que puedo grep a través de mi base de código periódicamente?¿Hay alguna forma de marcar el uso de las llamadas de biblioteca C no reentrantes?
Una pregunta relacionada es si hay una manera de marcar el uso de la biblioteca de terceros en las llamadas no reentrantes.
Supongo que la reentrada implica seguridad de subprocesos, pero no necesariamente al revés. ¿Hay alguna buena razón para usar llamadas no reentrantes en un proyecto enhebrado?
Pregunta: ¿son todas las llamadas de tiempo de ejecución de C en Linux que mantienen el estado entre llamadas (por ejemplo, malloc, rand, strtok, etc ...) intrínsecamente no inseguras? ¿O existe una directiva de compilador/vinculador para especificar el enlace con una versión segura para las cadenas de mensajes para estas llamadas? De hecho, me pregunto si realmente hay un problema que resolver para la seguridad del hilo. – selbie
@selbie: No, varía. Por ejemplo, [malloc] (http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html) generalmente es enhebrable. La seguridad de hilos de 'rand()' es una pregunta filosófica de todos modos. Una implementación 'rand' perfecta (un oráculo) sería inherentemente segura. – MSalters