在C++中,strtok_r函数是一个线程安全的字符串分割函数,它可以在多线程环境中使用,而不会影响其他线程的操作
下面是一个使用strtok_r进行多线程编程的示例:
#include<iostream>#include<string>#include<vector>#include<thread>#include <cstring>void tokenize(const std::string& input, char delimiter, std::vector<std::string>& tokens) { char* saveptr; char* cstr = new char[input.size() + 1]; std::strcpy(cstr, input.c_str()); char* token = strtok_r(cstr, &delimiter, &saveptr); while (token != nullptr) { tokens.push_back(token); token = strtok_r(nullptr, &delimiter, &saveptr); } delete[] cstr;}void process_tokens(const std::string& input, char delimiter) { std::vector<std::string> tokens; tokenize(input, delimiter, tokens); for (const auto& token : tokens) { std::cout << "Token: "<< token<< std::endl; }}int main() { std::string input1 = "Hello,World,This,Is,A,Test"; std::string input2 = "Multithreaded,Programming,Example"; std::thread t1(process_tokens, input1, ','); std::thread t2(process_tokens, input2, ','); t1.join(); t2.join(); return 0;}在这个示例中,我们创建了两个线程,每个线程都使用strtok_r函数来分割一个字符串。由于strtok_r是线程安全的,所以这个程序可以在多线程环境中正常运行。




