阅读量:0
在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
是线程安全的,所以这个程序可以在多线程环境中正常运行。