我需要设计一个线程安全的记录器。我的记录器必须有一个 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
}
}
}