我有最糟糕的時間試圖做一個類,有一個std :: ofstream和一個std :: mutex被鎖定和解鎖以控制對ofstream的訪問。使用std :: mutex成員和運算符<<插入過載的線程安全訪問std :: ofstream成員?
基本上我想要一個類thread_safe_ofstreamwith一個< <運營商,所以我可以用它喜歡:
thread_safe_ofstream ofs;
ofs << "debug info from different threads" << std::endl;
所以我知道我需要一個操作< <超載。雖然< < < < < < <右側的類有很多信息,但我無法找到任何有關如何實現自己的ostream類似輸入的文檔。
我知道下面的代碼不能工作,因爲無論輸入/輸出要求< <有,但這是我需要的類的精神。
Class thread_safe_ofstream
{
std::mutex mu;
std::ofstream stream;
template<typename T>
operator<<(T& thing)
{
mu.lock();
stream << thing;
mu.unlock();
}
};
這樣一個thread_safe_ofstream可以< <「從多個線程d至沒有問題(我希望)。
標準流必須是線程安全的。你必須更具體地說明你想用這把鎖完成什麼。 –
@PeteBecker,可能是從單個輸出<<操作不應該交錯?這是一個有效的要求。 – SergeyA
@SergeyA - 是的,當然可以猜測問題的目的是要問什麼。我正在尋找更明確的東西,這既不能也不能提供。 –