strtok()
не является MT-безопасным, потому что он хранит некоторые промежуточные переменные глобально и повторно использует их при каждом вызове (обратите внимание, вам не нужно снова передавать строку при каждом вызове strtok()
).Вы можете просмотреть справочные страницы используемых вами методов, и в конце всегда указывается, безопасен ли он для MT или нет.
Когда метод не безопасен для MT (многопоточность безопасна)или reentrant), вы должны искать тот же метод с суффиксом _r, означающим reentrand.В вашем примере strtok_r()
, как предлагается в другом ответе.