strtok()
no es seguro para MT porque almacena algunas variables intermedias globalmente y las reutiliza en cada llamada (vea que no tiene que volver a pasar la cadena cada vez que llama a strtok()
). Puede echar un vistazo a las páginas de manual de los métodos que está utilizando y siempre se indica al final si es seguro para MT o no.
Cuando un método no es seguro para MT (seguro para subprocesos múltiples o reentrante), debe buscar el mismo método con el sufijo _r que significa reentrada. En tu ejemplo, strtok_r()
como se sugiere en la otra respuesta.
strtok()
no es reentrante, por lo que no debe usarse desde aplicaciones con subprocesos, use strtok_r()
en su lugar.