异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁

时间:2023-03-09 17:31:03
异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁

返回目录

在System.Threading.Tasks命名空间下,使用ReaderWriterLockSlim对象来实现多线程并发时的锁管理,它比lock来说,性能更好,也并合理,我们都知道lock可以对代码块进行锁定,当多线程共同访问代码时,只能有一个线程去访问它,其它线程被阻塞,这对于写操作是必须的,但对于读操作来说,就有些浪费资源了,因为我们的读操作应该是共享的,多个线程可以现时去读它,这就引出了ReaderWriterLockSlim对象,用它来实现共享锁和互斥锁!

声明一个读写锁

 private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();

EnterReadLock和ExitReadLock-共享锁

当一个线程使用共享锁时,其它线程同样了可以访问这个资源,共用这个锁对象

  rwLock.EnterReadLock();
Console.WriteLine(DateTime.Now.ToLongTimeString() + "线程{0}读到了数据", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
rwLock.ExitReadLock();

EnterWriteLock和ExitWriteLock-互斥锁

当一个线程使用互斥锁时,其它线程将被阻塞,直到这个线程释放锁(ExitWriteLock)为止

  rwLock.EnterWriteLock();
Console.WriteLine(DateTime.Now.ToLongTimeString() + "线程{0}写了数据{1}", Thread.CurrentThread.ManagedThreadId, res);
Thread.Sleep();
rwLock.ExitWriteLock();

我们在测试时,可以模式多个并发的线程,去调用同一个加锁的代码,然后看一个它们执行的时间即可

       //多线程的并行
Parallel.Invoke(() =>
{
TestReadWrite("");
}, () =>
{
TestReadWrite("");
}, () =>
{
TestReadWrite("");
});

执行的结果

aaarticlea/png;base64,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" alt="" />

我们可以看到,共享锁在被访问时,几个线程是同时的;而互斥锁在使用时,则出现了线程之间的等待(阻塞)!

感谢各位的阅读!

返回目录