class log_String {
//These are private!
std::vector<std::string> list;
std::mutex m;
log_String& operator=(const log_String &source); //Operatore assegnazione
log_String(const log_String &source);
public:
log_String() {}; // <---- is this thread_safe?
void add(std::string string) {
std::lock_guard<std::mutex> l(m);
list.push_back(string);
}
void printFile(std::string file) {
std::lock_guard<std::mutex> l(m);
std::ofstream myfile;
myfile.open(file);
for (auto iterator = list.begin(); iterator != list.end(); ++iterator) {
myfile << *iterator << "\n";
}
}
};
はlog_String() {}
スレッドセーフですか? 多くのスレッドが同時に呼び出す場合でも、これは問題ではないはずですlog_String() {}
?これが間違っていますか? 私は間違った解決策は、private
を定義し、新しいロックを取得する新しいオブジェクトのインスタンス化を保護する可能性がありますか?デフォルトのコンストラクタはC++ではスレッドセーフですか?
この質問は理にかなっていません。コンストラクタは、オブジェクトの存続期間が始まる前に実行されます。オブジェクト*は、存在しない*複数のスレッドが同時にアクセスすることはできますか? –
@KerrekSBあなたのコメントは答えだったはずです!補足として、私は、オブジェクトライフタイムがどのように以前に始まるかについての質問をしました(http://stackoverflow.com/questions/20409500/what-does-the-c-standard-mean-regarding-object-lifetime-begins)。面白い答えがあります。標準で「初期化完了」とは何ですか? :) – mantler
@GeorgeAl:何ですか?どうやって?いつ? –