代码之家  ›  专栏  ›  技术社区  ›  Carra

debug.writeline锁

  •  4
  • Carra  · 技术社区  · 15 年前

    我的程序经常死锁。当我执行break all并查看线程时,我发现我们的日志功能中有三个线程:

    public class Logging
    {
        public static void WriteClientLog(LogLevel logLevel, string message)
        {
          #if DEBUG
          System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), message)); //LOCK
          #endif
          //...Log4net logging
        }
    }
    

    如果让程序继续运行,线程仍然停留在该行上。

    我看不到锁在哪里。调试类、字符串类和日期时间类似乎是线程安全的。

    当我移除 #if DEBUG System... #endif 但我很好奇为什么会发生这种行为。

    线程一:

    public void CleanCache()
    {
        Logging.WriteClientLog(LogLevel.Debug, "Start clean cache.");//Stuck
    }
    

    线程二:

    private void AliveThread()
    {
        Logging.WriteClientLog(LogLevel.Debug, "Check connection");//Stuck
    }
    
    1 回复  |  直到 15 年前
        1
  •  4
  •   Reed Copsey    15 年前

    Debug.WriteLine 将日志记录消息写入附加到的跟踪侦听器 Listeners 收集。

    您的跟踪侦听器之一必须在内部具有导致死锁的锁。检查您的侦听器代码,因为它很可能是罪魁祸首。