std::stringstream
本身并不是線程安全的
為了在多線程環境中使用 std::stringstream
,你可以采取以下措施:
std::stringstream
實例。這樣,每個線程都有自己的緩沖區和狀態,從而避免了競爭條件。這種方法的缺點是可能會消耗更多內存。#include<iostream>
#include <sstream>
#include<thread>
#include<vector>
void process(int id) {
std::stringstream ss;
ss << "Thread " << id << " is processing."<< std::endl;
std::cout << ss.str();
}
int main() {
const int num_threads = 5;
std::vector<std::thread> threads;
for (int i = 0; i < num_threads; ++i) {
threads.emplace_back(process, i);
}
for (auto& t : threads) {
t.join();
}
return 0;
}
std::mutex
)來同步對共享 std::stringstream
實例的訪問。這種方法的缺點是可能會導致性能下降,因為線程需要等待鎖釋放。#include<iostream>
#include <sstream>
#include<thread>
#include<vector>
#include <mutex>
std::mutex mtx;
std::stringstream ss;
void process(int id) {
std::unique_lock<std::mutex> lock(mtx);
ss << "Thread " << id << " is processing."<< std::endl;
lock.unlock();
std::cout << ss.str();
}
int main() {
const int num_threads = 5;
std::vector<std::thread> threads;
for (int i = 0; i < num_threads; ++i) {
threads.emplace_back(process, i);
}
for (auto& t : threads) {
t.join();
}
return 0;
}
總之,在多線程環境中使用 std::stringstream
時,請確保正確處理線程安全問題。可以通過為每個線程提供獨立的實例或使用同步機制來實現。