1.1 简介
本章介绍在C#中实现线程同步的几种方法。因为多个线程同时访问共享数据时,可能会造成共享数据的损坏,从而导致与预期的结果不相符。为了解决这个问题,所以需要用到线程同步,也被俗称为“加锁”。但是加锁绝对不对提高性能,最多也就是不增不减,要实现性能不增不减还得靠高质量的同步源语(Synchronization Primitive)。但是因为正确永远比速度更重要,所以线程同步在某些场景下是必须的。
线程同步有两种源语(Primitive)构造:用户模式(user – mode)和内核模式(kernel – mode),当资源可用时间短的情况下,用户模式要优于内核模式,但是如果长时间不能获得资源,或者说长时间处于“自旋”,那么内核模式是相对来说好的选择。
但是我们希望兼具用户模式和内核模式的优点,我们把它称为混合构造(hybrid construct),它兼具了两种模式的优点。
在C#中有多种线程同步的机制,通常可以按照以下顺序进行选择。
- 如果代码能通过优化可以不进行同步,那么就不要做同步。
- 使用原子性的
Interlocked方法。- 使用
lock/Monitor类。- 使用异步锁,如
SemaphoreSlim.WaitAsync()。- 使用其它加锁机制,如
ReaderWriterLockSlim、Mutex、Semaphore等。- 如果系统
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226656.html原文链接:https://javaforall.net
