strtok函数线程安全

我花了一些时间来debugging给出分段错误的程序。 这个bug是非常不确定的,而且是间歇性的,这很烦人。 我缩小了对strtok的呼吁。 我怀疑这是调用strtok拆分string在两个不同的线程导致分段错误。 我可以在两个不同的线程中调用strtok吗?

谢谢。

Solutions Collecting From Web of "strtok函数线程安全"

strtok()不可重入,所以不应该从线程应用程序中使用,而是使用strtok_r()

strtok()不是MT安全的,因为它全局地存储了一些中间变量,并在每次调用时重用它们(请参阅每次调用strtok()时都不必再次传递字符串)。 你可以看看你正在使用的方法的手册页,如果它是MT安全的,它总是显示在最后。

当一个方法不是MT安全的(多线程安全或可重入的),你应该寻找相同的方法,后缀_r表示reentrand。 在你的例子中, strtok_r()在另一个答案建议。