11 2017 档案

C# CancellationTokenSource和CancellationToken的实现
摘要:微软关于CancellationTokenSource的介绍很简单,其实CancellationTokenSource的使用也很简单,但是实现就不是那么简单了,我们首先来看看CancellationTokenSource的实现: CancellationTokenSource的实现相对比较复杂,我们 阅读全文

posted @ 2017-11-29 13:52 dz45693 阅读(16787) 评论(0) 推荐(3) 编辑

C# Task的GetAwaiter和ConfigureAwait
摘要:个人感觉Task 的GetAwaiter和ConfigureAwait也是比较好理解的,首先看看他们的实现 现在我们来看看TaskAwaiter<TResult>和ConfiguredTaskAwaitable<TResult>的实现: TaskAwaiter<TResult>中的OnComplet 阅读全文

posted @ 2017-11-28 13:43 dz45693 阅读(6610) 评论(0) 推荐(1) 编辑

C# Task WhenAny和WhenAll 以及TaskFactory 的ContinueWhenAny和ContinueWhenAll的实现
摘要:个人感觉Task 的WaitAny和WhenAny以及TaskFactory 的ContinueWhenAny有相似的地方,而WaitAll和WhenAll以及TaskFactory 的ContinueWhenAll也是相同,但是WaitAny和WhenAny的返回值有所不同。我们首先来看看Task 阅读全文

posted @ 2017-11-28 12:58 dz45693 阅读(5598) 评论(0) 推荐(1) 编辑

C# Task WaitAll和WaitAny
摘要:Task 有静态方法WaitAll和WaitAny,主要用于等待其他Task完成后做一些事情,先看看其实现部分吧: 我们首先看看WaitAll的方法,检查Task数组中每个Task实例,检查Task是否已经完成,如果没有完成就把Task添加到waitedOnTaskList集合中,如果waitedO 阅读全文

posted @ 2017-11-27 19:29 dz45693 阅读(8701) 评论(0) 推荐(3) 编辑

C# Task ContinueWith的实现
摘要:看了上一篇C# Task 是什么?返回值如何实现? Wait如何实现 我们提到FinishContinuations方法中会调用TaskContinuation实例,那么我们的ContinueWith就应该非常简单,只需要把TASK放到TaskContinuation结合中就可以了,Continue 阅读全文

posted @ 2017-11-27 12:31 dz45693 阅读(7689) 评论(0) 推荐(1) 编辑

C# Task 是什么?返回值如何实现? Wait如何实现
摘要:关于Task的API太多了,网上的实例也很多,现在我们来说说Task究竟是个什么东西【task一般用于多线程,它一定与线程有关】,还有它的返回值有事怎么搞的。 首先我们以一个最简单的API开始,TaskFactory的StartNew<TResult>方法,TaskFactory.cs 可见最终和调 阅读全文

posted @ 2017-11-26 16:12 dz45693 阅读(21431) 评论(1) 推荐(3) 编辑

C# ExecutionContext 实现
摘要:网上关于ExecutionContext的说明比较少,我们来看看微软的描述吧, 捕获从当前线程的执行上下文。 捕获从当前线程的执行上下文。 创建当前执行上下文的副本。 创建当前执行上下文的副本。 释放 ExecutionContext 类的当前实例所使用的所有资源。 释放 ExecutionCont 阅读全文

posted @ 2017-11-26 11:59 dz45693 阅读(3499) 评论(0) 推荐(1) 编辑

C# Barrier 实现
摘要:当您需要一组任务并行地运行一连串的阶段,但是每一个阶段都要等待所有其他任务都完成前一阶段之后才能开始,你一通过Barrier实例来同步这一类协同工作。Barrier初始化后,将等待特定数量的信号到来,这个数量在Barrier初始化时指定,在所指定的信号个数已经到来后,Barrier将执行一个指定的动 阅读全文

posted @ 2017-11-26 01:12 dz45693 阅读(3225) 评论(0) 推荐(0) 编辑

C# CountdownEvent实现
摘要:关于CountdownEvent网上的介绍比较少,因为它是实现和使用都很简单,先看看网上的一些评论吧: CountDownEvent调用成员函数Wait()将阻塞,直至成员函数Signal() 被调用达特定的次数,这时CountDownEvent称作就绪态,对于处于就绪态的CountDownEven 阅读全文

posted @ 2017-11-25 23:31 dz45693 阅读(1569) 评论(0) 推荐(0) 编辑

C# SemaphoreSlim 实现
摘要:当多个任务或线程并行运行时,难以避免的对某些有限的资源进行并发的访问。可以考虑使用信号量来进行这方面的控制(System.Threading.Semaphore)是表示一个Windows内核的信号量对象。如果预计等待的时间较短,可以考虑使用SemaphoreSlim,它则带来的开销更小。.NetFr 阅读全文

posted @ 2017-11-25 12:24 dz45693 阅读(4514) 评论(0) 推荐(0) 编辑

C# ManualResetEventSlim 实现
摘要:ManualResetEventSlim通过封装 ManualResetEvent提供了自旋等待和内核等待的组合。如果需要跨进程或者跨AppDomain的同步,那么就必须使用ManualResetEvent,而不能使用ManualResetEventSlim。那么首先我们看看 ManualReset 阅读全文

posted @ 2017-11-24 22:40 dz45693 阅读(5368) 评论(0) 推荐(3) 编辑

C# Monitor实现
摘要:Monitor的code如下,非常简单: 核心方法就是Enter和Exit,其中lock关键字就是这2个方法的一个封装,剩下的Wait、Pulse和PulseAll也是很重要的方法,但是平时运用的比较少。所以这里重点说说Wait、Pulse和PulseAll方法。 线程优先顺序: 【等待队列】->【 阅读全文

posted @ 2017-11-24 21:09 dz45693 阅读(1689) 评论(0) 推荐(0) 编辑

C# SpinLock实现
摘要:关于SpinLock自旋锁网上已经有很多说明,这里也copy了一部分,我这里主要关注微软的实现,学习人家的实现方式。 如果由于垃圾回收,基于对象的锁对象开销太高,可以使用SpinLock结构。.NET 4以后版本可使用,如果你有很多个锁(如,一个列表里面的每一个节点)并且锁时间通常非常的短,使用Sp 阅读全文

posted @ 2017-11-24 18:41 dz45693 阅读(1615) 评论(0) 推荐(1) 编辑

C# SpinWait 实现
摘要:其实SpinWait的code 非常简单,以前看过很多遍,但是从来都没有整理过,整理也是再次学习吧。 我们先看看SpinWait的一些评论或者注意点吧:如果等待某个条件满足需要的时间很短,而且不希望发生昂贵的上下文切换,那么基于自旋的等待是一种很好的替换方案,SpinWait不仅提供了基本自旋功能, 阅读全文

posted @ 2017-11-24 12:16 dz45693 阅读(2129) 评论(1) 推荐(3) 编辑

C# ConcurrentBag实现
摘要:ConcurrentBag可以理解为是一个线程安全无序集合,API比我们的list要弱一点,那我们来看看它的实现: 首先我们需要知道里面有2个内部类Node和ThreadLocalList都是链表结构,其中Node是双向链表,因为它有m_next和m_prev属性,但是ThreadLocalList 阅读全文

posted @ 2017-11-23 13:55 dz45693 阅读(5096) 评论(0) 推荐(0) 编辑

C# ConcurrentDictionary实现
摘要:ConcurrentDictionary的源码看了很多遍,今天抽点时间整理一下,它的实现比Dictionary要复杂很多,至于线程安全我觉得比较简单,用的是lock的思想。首先我们来看看它的源码。 ConcurrentDictionary的构造函数依然有int capacity参数,该参数是控制Co 阅读全文

posted @ 2017-11-23 12:36 dz45693 阅读(7337) 评论(1) 推荐(0) 编辑

C# ConcurrentStack实现
摘要:我们通过C# Queue 和Stack的实现知道Stack是依靠数组实现的,那么ConcurrentStack的栈又是如何实现的了,然后它的线程安全又是怎么做到的了? 来看看其code吧 ConcurrentStack<T>里面有一个内部类Node,看到这里我们就知道ConcurrentStack< 阅读全文

posted @ 2017-11-22 18:50 dz45693 阅读(1458) 评论(0) 推荐(0) 编辑

C# ConcurrentQueue实现
摘要:我们从C# Queue 和Stack的实现知道Queue是用数组来实现的,数组的元素不断的通过Array.Copy从一个数组移动到另一个数组,ConcurrentQueue我们需要关心2点:1线程安全是怎么实现的,2队列又是怎么实现的?我们来看看其实现code: 首先ConcurrentQueue构 阅读全文

posted @ 2017-11-22 18:48 dz45693 阅读(2849) 评论(0) 推荐(1) 编辑

C# Dictionary, SortedDictionary, SortedList
摘要:就我个人觉得Dictionary, SortedDictionary, SortedList 这几个类的使用是比较简单的,只要稍微花点时间在网上查找一点资料,然后在阅读以下源码就理解的很清楚了。为什么要写这一片文章了,看一下code吧: Dictionary<int, object> dict = 阅读全文

posted @ 2017-11-22 11:32 dz45693 阅读(2038) 评论(0) 推荐(0) 编辑

C# Queue 和Stack的实现
摘要:Queue 和Stack的使用就不用多说吧,一个是先进先出,一个是后进先出。 这里我主要关注其实现原理。 queue的实现如下: Stack的实现: Queue 和Stack都是依靠数组来实现,并且都有带int capacity的构造函数。假如我们定义一个数组长度为5,Queue 和Stack都添加 阅读全文

posted @ 2017-11-22 11:29 dz45693 阅读(1773) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示