Debería considerar no usar strtok
o strtok_r
en absoluto. Es trivial escribir sus propias funciones similares a estas, pero mejor adaptadas a la forma exacta en que desea usarlas, y por supuesto hacer que la persona que llama almacene todo el estado y pase un puntero al estado de seguridad/reentrada de hilos.
En cuanto a su pregunta sobre el uso de un semáforo (u otra primitiva de bloqueo) alrededor de las llamadas al strtok
, eso no ayudará si solo lo coloca alrededor de la llamada real. Tendría que mantener el bloqueo durante todo el proceso de análisis de la cadena para proteger el estado interno de strtok
. Creo que esto es lo que mucha gente llama código de bloqueo en lugar de los datos y generalmente se considera Una mala cosa.
duplicado: http://stackoverflow.com/questions/4031075/strtok-function-thread-safety – Necrolis
No lo cierre como un duplicado. Las respuestas están relacionadas, pero no es lo mismo. Aquí, OP está pidiendo consejos sobre cómo manejar la no reentrada de 'strtok' en lugar de intentar depurar un problema debido a ello. –