strtok功能线程安全

时间:2010-10-27 08:04:00

标签: c linux thread-safety strtok

我花了一些时间来调试一个给出分段错误的程序。这个bug是非常不确定和间歇性的,这很烦人。我把它缩小到调用strtok()。我怀疑调用strtok()是在两个不同的线程中分割字符串导致分段错误。我可以在两个不同的主题中调用strtok()吗?

感谢。

2 个答案:

答案 0 :(得分:38)

strtok()不可重入,因此不应在线程应用程序中使用,而是使用strtok_r()

答案 1 :(得分:6)

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

当一个方法不是MT安全的(多线程安全或可重入)时,你应该寻找带有后缀_r的相同方法,意思是重入。在您的示例中,strtok_r()按照其他答案的建议。

相关问题