Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多线程应用程序中的C#TraceSource类_C#_Multithreading_Trace - Fatal编程技术网

多线程应用程序中的C#TraceSource类

多线程应用程序中的C#TraceSource类,c#,multithreading,trace,C#,Multithreading,Trace,msdn:“此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”它只包含实例方法 我应该如何使用它,使所有活动都能通过TextWriterTraceListener将记录器发送到文本文件。是一个静态成员,所有线程都使用(通过调用)TraceEvent方法safe (我有点问过这个问题,但我不能相信,尽管有文档,但有人说它没问题)。在多线程应用程序中使用非线程安全(或不能保证线程安全)的资源时,我会使用lock关键字 lock( _loc

msdn:“此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”它只包含实例方法

我应该如何使用它,使所有活动都能通过TextWriterTraceListener将记录器发送到文本文件。是一个静态成员,所有线程都使用(通过调用)TraceEvent方法safe


(我有点问过这个问题,但我不能相信,尽管有文档,但有人说它没问题)。

在多线程应用程序中使用非线程安全(或不能保证线程安全)的资源时,我会使用lock关键字

lock( _lockObject)
{
  // do my non-thread-safe-operations here
}
lock关键字的文档/示例可在此处找到:

对于使用类的公共静态实例的所有线程,这并不一定是线程安全的。使用静态实例可以确保对象的状态在线程之间共享/一致,但desn不一定阻止对方法的并行调用。事实上,如果实例方法正在使用静态对象中的一些公共状态变量,那么从多个线程访问对象可能会带来其他问题,如争用条件、多个线程试图访问同一资源等。对象的静态实例不会阻止这些条件


如果您使用的是对象的静态实例,请在对其进行操作时在其周围放置一个锁,这样您应该不会有问题。

TraceSource类是线程安全的。看


我相信以前它没有被列为线程安全,但这是一个文档错误。

yes或monitor类。但我的问题是:拥有一个TraceSource的静态实例并使用它的TraceEvent方法安全吗?明白了,我明白了。我进一步阐述了我的答案。希望有帮助。在TraceSource的情况下,“线程不安全”可能是因为TraceStener不是线程安全的。这就是为什么会有TraceInternal.UseGlobalLock。我想知道的是:如果TraceListener.IsThreadSafe像TextWriterTraceListener一样返回false,那么这个全局锁足够了吗?出于性能原因,我不想进行双重锁定。例如,见