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