随笔分类 -  并发同步

Concurrency and synchronization
Semaphore和SemaphoreSlim实现并发同步
摘要:Semaphore,中文译为信号灯。在C#中,它可以允许指定数量的线程同时访问共享资源,而其他的线程必须等待。 即现在有5个线程同时运行,但Semaphore指定2个线程可以同时访问某一共享资源。当执行Semaphore.Wait()时,只有2个线程可以同时进入访问共享资源,而其他三个线程则阻塞等待 阅读全文
posted @ 2020-10-22 17:25 F风 阅读(590) 评论(0) 推荐(0)
Barrier实现并发同步
摘要:Barrier,中文被译为屏障。在C#中,可以用来实现多任务在多阶段中协同工作。通俗来讲,就是多个线程在执行到某个被共同指定步骤(即Barrier.SignalAndWait())的时候,就像遇到了屏障一样,必须等待其他还未执行到该步骤的线程。如果每个线程都执行到了该步骤,则大家又继续执行各自的逻辑 阅读全文
posted @ 2020-10-22 15:20 F风 阅读(994) 评论(0) 推荐(0)
CountdownEvent实现并发同步
摘要:CountdownEvent,该类包含一个需要被初始化的计数器数字,如果该计数器数字归零之后,就会释放被阻塞的线程。 CountdownEvent.Signal()执行后,计数器会自减1; CountdownEvent.Wait()执行后,如果计数器归零,则会立即释放该线程;否则,就会阻塞当前线程。 阅读全文
posted @ 2020-10-22 10:01 F风 阅读(312) 评论(0) 推荐(0)
AutoResetEvent实现并发同步
摘要:AutoResetEvent,继承自EventWaitHandle,用在多线程中保护对共享资源的访问,保证每次只能有一个线程对共享资源进行访问。 AutoResetEvent最特别之处,在于每次保证只有一个线程执行逻辑,其他的线程只能等待。 AutoResetEvent通过信号量来阻塞和释放线程。其 阅读全文
posted @ 2020-10-21 16:59 F风 阅读(184) 评论(0) 推荐(0)
.net core WebApi ManualResetEvent实现并发同步
摘要:ManualResetEvent,即手动重置事件,通过信号量来判别当前线程是否应该阻塞或继续执行。使用方式与ManualResetEventSlim差不多,ManualResetEventSlim只是针对ManualResetEvent轻量化的使用。 当执行ManualResetEvent.Set( 阅读全文
posted @ 2018-09-29 11:53 F风 阅读(1005) 评论(0) 推荐(0)
.net core WebApi Mutex实现并发同步
摘要:Mutex,中文译为互斥体,在.net中也是作为一种线程或进程之间的互斥体存在。即在同一时刻,一个共享资源只允许被某一个线程或进程访问,其他线程或进程需要等待(直至获取互斥锁为止)。 Mutex的使用方式与Monitor很相似,但绝不相同。Monitor支持线程间并发同步,Mutex不但支持线程也支 阅读全文
posted @ 2018-09-28 16:45 F风 阅读(3247) 评论(2) 推荐(1)
.net core WebApi Monitor实现并发同步
摘要:在.net中,还可以使用Monitor实现线程并发同步。Monitor类是纯托管且完全可移植,并且可能会在操作系统资源需求方面更加高效。 Monitor的锁对象尽可能使用引用对象,如果是字符串或值对象,会出现引发SynchronizationLockException异常。 其实我们日常用的lock 阅读全文
posted @ 2018-09-27 21:47 F风 阅读(844) 评论(0) 推荐(0)
.net Monitor产生SynchronizationLockException异常的原因
摘要:有时在使用Monitor进行并发同步编程时,会产生SynchronizationLockException异常,抛出的异常内容是"Object synchronization method was called from an unsynchronized block of code." 。意思是“ 阅读全文
posted @ 2018-09-27 18:30 F风 阅读(1270) 评论(0) 推荐(0)
.net core WebApi Interlocked配合ManualResetEventSlim实现并发同步
摘要:由于项目有某种需求,在WebApi中,有大量的请求需要操作相同的数据,因此需要用到并发同步机制去操作共享的数据。 本次配合使用Interlocked和ManualResetEventSlim来实现并发同步的目的。 Interlocked实现了原子性的操作,ManualResetEventSlim提供 阅读全文
posted @ 2018-09-25 18:34 F风 阅读(409) 评论(0) 推荐(0)