2018年5月12日

使用Barrier分三步将大象放入冰箱

摘要: 1 class Program 2 { 3 //构造大象和冰箱 4 private static ElephantsAndFridges elephantsAndFridges = new ElephantsAndFridges(); 5 6 static void Main(string[] args) ... 阅读全文

posted @ 2018-05-12 11:25 庭前花满留晚照 阅读(282) 评论(0) 推荐(0) 编辑

三种方式构建C#单例模式

摘要: 1 /// 2 /// 双检锁实现单例 3 /// 4 public sealed class SingletonDoubleCheck 5 { 6 //s_lock对象是实现线程安全所需要的,定义这个对象时,我们假设创建单例对象的代价高于创建一个System.Object对象 7 //并假设... 阅读全文

posted @ 2018-05-12 11:25 庭前花满留晚照 阅读(926) 评论(0) 推荐(0) 编辑

构建线程安全队列示例

摘要: 1 /// 2 /// 线程安全的队列 3 /// 允许多个线程对队列入队出队 4 /// 注意:除非有一个可供处理的数据项,否则试图出队一个数据项的线程会一直阻塞 5 /// 6 /// 7 internal sealed class SynchronizedQueue 8 { 9 //进出... 阅读全文

posted @ 2018-05-12 11:24 庭前花满留晚照 阅读(242) 评论(0) 推荐(0) 编辑

条件变量模式-让线程根据条件执行

摘要: 1 /// 2 /// 条件变量模式 3 /// 让线程根据条件执行 4 /// 5 public sealed class ConditionVariablePattern 6 { 7 //两个线程使用同一个锁 8 private readonly object m_lock = new obj... 阅读全文

posted @ 2018-05-12 11:24 庭前花满留晚照 阅读(458) 评论(0) 推荐(0) 编辑

C#的Lazy与LazyInitializer

摘要: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //初始化 Lazy 类的新实例 6 //当延迟初始化发生时,将使用指定的初始化函数和初始化模式 7 // 参数: 8 ... 阅读全文

posted @ 2018-05-12 11:24 庭前花满留晚照 阅读(1376) 评论(0) 推荐(3) 编辑

ReaderWriterLockSlim使用示例

摘要: 1.一个线程向数据写入时,请求访问的其它所有线程都被阻塞。 2.一个线程从数据读取时,请求读取的其它所有线程允许继续执行,但请求写入的所有线程仍被阻塞。 3.向数据写入的线程结束后,要么解除一个写入线程的阻塞,使它能向数据写入,要么解除所有读取线程的阻塞,使他们能并发读取数据。如果没有线程被阻塞,锁 阅读全文

posted @ 2018-05-12 11:23 庭前花满留晚照 阅读(268) 评论(0) 推荐(0) 编辑

自旋和线程所有权及递归构成混合锁

摘要: 1 /// 2 /// 自旋、线程所有权、递归 3 /// 构成混合锁 4 /// 5 internal sealed class AnotherHybridLock : IDisposable 6 { 7 //基元用户模式构造(Interlocked的方法)使用 8 privat... 阅读全文

posted @ 2018-05-12 11:22 庭前花满留晚照 阅读(269) 评论(0) 推荐(0) 编辑

Task扩展方法取消操作

摘要: 1 /// 2 /// 任务扩展,传入取消操作 3 /// 4 public static class TaskExtensionDemo 5 { 6 //因为没有非泛型的TaskCompleteSource类 7 private struct Void { } 8 9 public ... 阅读全文

posted @ 2018-05-12 11:22 庭前花满留晚照 阅读(694) 评论(0) 推荐(1) 编辑

异步函数Demo

摘要: 1 private static async Task IssueClientRequestAsync(string serverName, string message) 2 { 3 Console.WriteLine("进入IssueClientRequestAsync"); 4 //NamedPipeC... 阅读全文

posted @ 2018-05-12 11:22 庭前花满留晚照 阅读(425) 评论(0) 推荐(0) 编辑

任务工厂

摘要: 1 private static void TaskFactoryDemo() 2 { 3 Task taskParent = new Task(() => 4 { 5 //向应该被取消的 System.Threading.CancellationToken 发送信号。 6... 阅读全文

posted @ 2018-05-12 11:21 庭前花满留晚照 阅读(298) 评论(1) 推荐(0) 编辑

使用Parallel计算目录中的文件字节长度

摘要: 1 /// 2 /// 根据通配符和搜索条件计算给定目录中的文件字节长度 3 /// 4 /// 要搜索的目录的相对或绝对路径。 此字符串不区分大小写。 5 /// 要与 path 中的文件名匹配的搜索字符串。 此参数可以包含有效的文本路径和通配符(* 和 ?) 字符(参见“备注”)的组合,但不支持正... 阅读全文

posted @ 2018-05-12 11:21 庭前花满留晚照 阅读(294) 评论(0) 推荐(0) 编辑

定时计算

摘要: 1 internal static class TimerDemo 2 { 3 //提供以指定的时间间隔对线程池线程执行方法的机制 4 private static Timer timer; 5 6 //这个方法签名必须和TimerCallback委托匹配 7 private static void ... 阅读全文

posted @ 2018-05-12 11:21 庭前花满留晚照 阅读(182) 评论(0) 推荐(0) 编辑

使用Task的Wait和Result时注意

摘要: 如果计算限制的任务抛出未处理的异常,该异常会被“吞噬”并存储到一个集合中,而线程池线程可以返回到线程池中。调用Wait方法或者Result属性时,这些成员会抛出一个System.AggregateException对象。 如果一直不调用Wait或Result,或者一直不查询Task的Exceptio 阅读全文

posted @ 2018-05-12 11:20 庭前花满留晚照 阅读(5039) 评论(0) 推荐(1) 编辑

取消任务(Task)

摘要: 1 private static void TaskCancelDemo() 2 { 3 //向应该被取消的 System.Threading.CancellationToken 发送信号 4 CancellationTokenSource cancellationTokenSource = new Canc... 阅读全文

posted @ 2018-05-12 11:20 庭前花满留晚照 阅读(3383) 评论(0) 推荐(0) 编辑

启动新任务和子任务

摘要: 1 private static void StartNewTask() 2 { 3 //创建并启动一个Task 4 Task task = Task.Run(() => TaskTest("TaskTest1")); 5 6 //继续另一个任务 7 /... 阅读全文

posted @ 2018-05-12 11:20 庭前花满留晚照 阅读(425) 评论(0) 推荐(0) 编辑

阻止线程上下文流动

摘要: 1 /// 2 /// 阻止执行上下文流动来影响线程逻辑调用上下文数据 3 /// 4 public static void FlowDataContext() 5 { 6 //将数据放到FlowDataContext线程的逻辑调用上下文 7 Call... 阅读全文

posted @ 2018-05-12 11:19 庭前花满留晚照 阅读(218) 评论(0) 推荐(0) 编辑

协作式取消和超时

摘要: 1 internal static class CancellationDemo 2 { 3 public static void Go() 4 { 5 //向应该被取消的CancellationToken发送信号 6 CancellationTokenSource cancellatio... 阅读全文

posted @ 2018-05-12 11:19 庭前花满留晚照 阅读(211) 评论(0) 推荐(0) 编辑

简单混合锁(HybridLock)

摘要: 1 internal sealed class SimpleHybridLock : IDisposable 2 { 3 //基元用户模式构造使用 4 private int m_waiters = 0; 5 6 //基元内核模式构造 7 private AutoResetEvent m_waiter... 阅读全文

posted @ 2018-05-12 11:18 庭前花满留晚照 阅读(963) 评论(0) 推荐(0) 编辑

为线程安全集合提供阻塞和限制功能

摘要: 1 class Program 2 { 3 //为线程安全集合提供阻塞和限制功能 4 private static BlockingCollection blockingCollection = new BlockingCollection(new ConcurrentQueue()); 5 6 static void... 阅读全文

posted @ 2018-05-12 11:18 庭前花满留晚照 阅读(255) 评论(0) 推荐(0) 编辑

内核模式构造-Semaphore构造(WaitLock)

摘要: 1 internal sealed class SimpleWaitLock : IDisposable 2 { 3 //(信号量)允许多个线程并发访问一个资源 4 //如果所有线程以只读方式访问资源则是安全的 5 private Semaphore m_Semaphore; 6 7 public SimpleWaitLock(int maxCon... 阅读全文

posted @ 2018-05-12 11:17 庭前花满留晚照 阅读(415) 评论(0) 推荐(0) 编辑

导航