strtok功能线程安全

Ste*_*eng 19 c linux thread-safety strtok

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

谢谢.

Pup*_*ppe 38

strtok()是不可重入的,因此不应该从线程应用程序中使用,strtok_r()而是使用它.


Ben*_*ery 6

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

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