スレッドセーフなロガーを設計する必要があります。私のロガーには、ログに記録するテキストを単にキューに入れる Log() メソッドが必要です。また、ロガーはロックフリーである必要があります。これにより、ロガーをロックせずに他のスレッドがメッセージをログに記録できます。何らかの同期イベントを待機し、標準の .NET ログ (スレッドセーフではない) を使用してキューからすべてのメッセージをログに記録する必要があるワーカー スレッドを設計する必要があります。だから私が興味を持っているのは、ワーカースレッドとログ機能の同期です。以下は、私が設計したクラスのスケッチです。ここで Monitor.Wait/Pulse を使用するか、ワーカー スレッドを一時停止して再開するには他の手段を使用する必要があると思います。ロガーのジョブがないときに CPU サイクルを消費したくありません。
別の言い方をすれば、ロガーを使用する呼び出し元スレッドをブロックしないロガーを設計したいと考えています。私は高性能システムを持っています - そしてそれは要件です。
class MyLogger
{
// This is a lockfree queue - threads can directly enqueue and dequeue
private LockFreeQueue<String> _logQueue;
// worker thread
Thread _workerThread;
bool _IsRunning = true;
// this function is used by other threads to queue log messages
public void Log(String text)
{
_logQueue.Enqueue(text);
}
// this is worker thread function
private void ThreadRoutine()
{
while(IsRunning)
{
// do something here
}
}
}