我花了一些时间来调试一个出现分段错误的程序。这个缺陷相当不确定和间歇性,非常令人烦恼。我将其缩小到调用 strtok()
。我怀疑在两个不同的线程中调用 strtok()
来拆分字符串会导致分段错误。我能在两个不同的线程中调用 strtok()
吗?
谢谢。
我花了一些时间来调试一个出现分段错误的程序。这个缺陷相当不确定和间歇性,非常令人烦恼。我将其缩小到调用 strtok()
。我怀疑在两个不同的线程中调用 strtok()
来拆分字符串会导致分段错误。我能在两个不同的线程中调用 strtok()
吗?
谢谢。
strtok()
不可重入,因此不应在线程应用程序中使用,应改为使用strtok_r()
。
strtok()
不是MT安全的,因为它将一些中间变量全局存储并在每个调用时重复使用它们(看到你不必每次调用strtok()
时再传递字符串)。
您可以查看您正在使用的方法的手册,在结尾处始终指示它是否是MT安全的。
当方法不是MT安全(多线程安全或可重入)时,您应该寻找相同后缀名为_r的方法,意思是可重入。在您的示例中,就像其他答案建议的那样,您可以使用strtok_r()
。