如何使一个类线程安全 [英] How to make a class Thread Safe

查看:167
本文介绍了如何使一个类线程安全的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写一个C#应用程序。
我有(一种)日志类。而这个记录类将被多个线程使用。
如何使这个类线程安全的?
我应该做它作为单身?
什么是最好的做法呢?
是没有办法,我可以了解如何使它线程安全的文档?



感谢


解决方案

在C#中,任何物体可以被用来保护一个临界区,或换言之,代码必须不是由两个线程同时被执行。

例如,以下将同步访问SharedLogger.Write方法,因此只有一个单一的线程被记录在任何给定时间的消息。

 公共类SharedLogger:ILogger 
{
公共静态SharedLogger实例=新SharedLogger();

公共无效写入(字符串s)
{
锁(_lock)
{
_writer.Write(S);
}
}

私人SharedLogger()
{
_writer =新日志写进程();
}

私有对象_lock;
私人日志写_writer;
}


I am writing a C# application. I have (a kind of) logging class. and this logging class will be used by many threads. How to make this class thread safe? Should I make it as singleton? what are the best practices there? Is there a document that I can read about how to make it thread-safe?

Thanks

解决方案

In C#, any object can be used to protect a "critical section", or in other words, code that must not be executed by two threads at the same time.

For example, the following will synchronize access to the SharedLogger.Write method, so only a single thread is logging a message at any given time.

public class SharedLogger : ILogger
{
   public static SharedLogger Instance = new SharedLogger();

   public void Write(string s)
   {
      lock (_lock)
      {
         _writer.Write(s);
      }
   }

   private SharedLogger() 
   { 
      _writer = new LogWriter();
   }

   private object _lock;
   private LogWriter _writer;
}

这篇关于如何使一个类线程安全的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆