-2

Windows 用のシンプルでスレッドセーフなコンソール ラッパーを C++ で作成しようとしています。ただし、API を見ると、コンソールへのアクセスをロック/ロック解除するための関数が表示されません。メモリには、HeapLockHeapUnlockがあります。

そのような機能はコンソールに存在しますか?それとも独自のミューテックスを作成する必要がありますか?

編集:

以下のコメントに示されているように、コンソール ラッパーはコンソールへのアクセスを制御するためのものです。ロックが必要なのは、スレッドがコンソールで複合操作 (たとえば、コンソールの色を変更し、いくつかのメッセージを書き込んでから色を復元するなど) を実行するときに、他のスレッドがコンソールを変更したり、コンソールに書き込んだりできないようにするためです。 .

4

1 に答える 1

2

ロギングを担当する関数へのアクセスをロックする必要があります。次のコードのように:

std::mutex mforlog;
void Log(std::string s) {
     std::unique_lock<mutex> lock{mforlog};
     std::cout << s << std::endl;
}

ロギングが異なるプロセスから行われる場合は、名前付きミューテックス (winapi 関数: CreateMutex) を使用します。

ログをロックすると、他の問題が発生する可能性があることにも注意してください。一部のスレッドの動作が遅くなる (ミューテックスを待機する) など、見つけにくいバグが発生する可能性があります。

于 2013-08-09T14:59:32.077 に答える