c#读写锁浅记录

复制代码
public class C
  {
    static private ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();
    public static void Main()
    {
      Thread t_read1 = new Thread(new ThreadStart(WriteSomething));
      t_read1.Start();
      Console.WriteLine("{0} Create Thread ID {1} , Start WriteSomething", DateTime.Now.ToString("hh:mm:ss fff"), t_read1.GetHashCode());
      Thread t_read2 = new Thread(new ThreadStart(WriteSomething));
      t_read2.Start();
      Console.WriteLine("{0} Create Thread ID {1} , Start WriteSomething ", DateTime.Now.ToString("hh:mm:ss fff"), t_read2.GetHashCode());
      Thread t_write1 = new Thread(new ThreadStart(ReadSomething));
      t_write1.Start();
      Console.WriteLine("{0} Create Thread ID {1} , Start ReadSomething", DateTime.Now.ToString("hh:mm:ss fff"), t_write1.GetHashCode());
      Thread t_write2 = new Thread(new ThreadStart(ReadSomething));
      t_write2.Start();
      Console.WriteLine("{0} Create Thread ID {1} , Start ReadSomething", DateTime.Now.ToString("hh:mm:ss fff"), t_write2.GetHashCode());

    }
    static public void ReadSomething()
    {
      Console.WriteLine("{0} Thread ID {1} Begin EnterReadLock...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
      rwl.EnterReadLock();
      try
      {
        Console.WriteLine("{0} Thread ID {1} reading sth...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
        Thread.Sleep(5000);//模拟读取信息
        Console.WriteLine("{0} Thread ID {1} reading end.", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
      }
      finally
      {
        rwl.ExitReadLock();
        Console.WriteLine("{0} Thread ID {1} ExitReadLock...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
      }
    }
    static public void WriteSomething()
    {
      Console.WriteLine("{0} Thread ID {1} Begin EnterWriteLock...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
      rwl.EnterWriteLock();
      try
      {
        Console.WriteLine("{0} Thread ID {1} writing sth...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
        Thread.Sleep(10000);//模拟写入信息
        Console.WriteLine("{0} Thread ID {1} writing end.", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
      }
      finally
      {
        rwl.ExitWriteLock();
        Console.WriteLine("{0} Thread ID {1} ExitWriteLock...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());
      }
    }
  }
复制代码

可以同时读取数据,但只能一个线程进入写数据。

posted @   vba是最好的语言  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示