代码改变世界

C# 线程手册 第三章 使用线程 AutoResetEvent, Mutex & Interlocked

2012-02-10 21:13 by DanielWise, 3520 阅读, 3 推荐, 收藏, 编辑
摘要:AutoResetEvent 类AutoResetEvent类的工作方式与ManualResetEvent类似。它会等超时事件发生或者信号事件发生然后通知正在等待的线程。ManualResetEvent和AutoResetEvent之间最重要差别之一是AutoResetEvent在WaitOne()方法执行完会改变自身状态。下面列表显示了如何使用AutoResetEvent类:/*************************************/* Copyright (c) 2012 Daniel Dong * * Author:oDaniel Dong * Blog:o www.. 阅读全文

C# 线程手册 第三章 使用线程 手动同步

2012-02-10 12:00 by DanielWise, 3675 阅读, 1 推荐, 收藏, 编辑
摘要:第三种同步策略关注手动同步技术,.NET Framework 提供了一个经典的技术套件。他们给了程序员使用类似WIN32线程API的底层线程API来创建和管理多线程应用程序的能力。下面的表显示了System.Threading 命名空间中可以用于手动同步的一些类。ManualResetEvent 类一个ManualResetEvent对象仅能处理signaled(true)或者non-signaled(false)两个状态。ManualResetEvent类继承自WaitHandle类,ManualResetEvent的构造函数接收一个参数用来定义对象的初始值。Set()和Reset()方法返 阅读全文

C# 线程手册 第三章 使用线程 ReaderWriterLock 类

2012-02-07 21:53 by DanielWise, 6001 阅读, 2 推荐, 收藏, 编辑
摘要:一个ReaderWriterLock 类定义一个实现单写多读语义的锁。这个类通常用在能被多个线程读取但是仅能被一个线程写入的文件操作时使用。下面是ReaderWriterLock类中的四个主要方法: a. AcquireReaderLock(): 这个重载方法获取一个读者锁,接受一个整型或者TimeSpan类型的timeout 值。timeout是一个检测死锁的利器。 b. AcquireWriterLock(): 这个重载方法获取一个写者锁,接受一个整型或者TimeSpan类型的timeout 值。 c. ReleaseReaderLock(): 释放读者锁。 d. ReleaseWrite 阅读全文

C# 线程手册 第三章 使用线程 Monitor.TryEnter()

2012-02-05 22:08 by DanielWise, 10884 阅读, 2 推荐, 收藏, 编辑
摘要:Monitor 类的TryEnter() 方法在尝试获取一个对象上的显式锁方面和 Enter() 方法类似。然而,它不像Enter()方法那样会阻塞执行。如果线程成功进入关键区域那么TryEnter()方法会返回true. TryEnter()方法的三个重载方法中的两个以一个timeout类型值作为参数,表示按照指定时间等待锁。我们来看一个关于如何使用TryEnter()方法的例子,Monito... 阅读全文

C# 线程手册 第三章 使用线程 Monitor.Wait() 和 Monitor.Pulse()

2012-02-04 20:44 by DanielWise, 8004 阅读, 3 推荐, 收藏, 编辑
摘要:Wait() 和 Pulse() 机制用于线程间交互。当在一个对象上使用Wait() 方法时,访问这个对象的线程就会一直等待直到被唤醒。Pulse() 和 PulseAll() 方法用来通知等待的线程醒来的。下面是关于Wait() 和 Pulse() 方法如何运行的例子,WaitAndPulse.cs:Wait() 和 Pulse() 方法仅可以在Enter() 和 Exit() 代码块内部调用。/*************************************/* Copyright (c) 2012 Daniel Dong * * Author:Daniel Dong * Bl. 阅读全文

C# 线程手册 第三章 使用线程 Monitor.Enter() 和 Monitor.Exit()

2012-02-03 17:03 by DanielWise, 5383 阅读, 3 推荐, 收藏, 编辑
摘要:Monitor 方法是静态的,不需要生成Monitor 类的实例就可以直接调用它们。在.NET Framework 中,每个对象都有一个与之关联的锁,对象可以得到并释放它以便于在任意时间只有一个线程可以访问对象实例变量和方法。类似的,.NET Framework 中的每个对象都提供一个允许自己进入等待状态的机制。与锁的机制类似,这种机制的主要目的是为了实现线程间通信。当一个线程进入到一个对象的关键部分且需要一个特定条件并假设另外一个线程将会在同样的关键区域中创建条件时这种机制才会发生。 现在比较特别的是在任意时间任意关键区域内仅允许有一个线程,而且当第一个线程进入到关键区域以后,其他线程都不能 阅读全文

C# 线程手册 第三章 使用线程 .NET 同步策略

2012-02-02 20:45 by DanielWise, 3014 阅读, 1 推荐, 收藏, 编辑
摘要:公共语言架构提供了三种策略来同步访问实例和静态方法以及实例属性,这三种策略是: 1. 同步上下文 2. 同步代码区域 3. 手动同步同步上下文上下文是一系列对象集合在执行时常见的属性或者使用规范。可以被添加的上下文属性包括同步,线程关联以及事务。简而言之,一个上下文是由一些相似的对象组成。在同步策略中,我们使用SynchronizationAttribute 类来为ContextBoundObject 对象提供简单、原子化同步。上下文中绑定到上下文规则上的对象被称作上下文绑定对象。.NET 自动地使用一个同步锁来关联这个对象,在每次方法调用之前锁住并在方法返回时释放锁(允许其他竞争线程访问对象 阅读全文

C# 线程手册 第三章 使用线程 .NET 对同步的支持

2012-01-30 07:24 by DanielWise, 3306 阅读, 4 推荐, 收藏, 编辑
摘要:.NET Framework 提供了很多System.Threading,System.EnterpriseService 和 System.Runtime.Compiler 命名空间中的很多类来帮助程序员开发线程安全代码。下表简要地描述了.NET Framework 中的一些同步类。MethodImplAttribute 类正如System.Runtime.CompilerServices 命名空间名字所显式的,这个命名空间中包含影响CLR 运行时行为的属性。MethodImplAttribute是通知CLR某个方法是如何实现的众多属性之一。MethodImplAttribute 构造函数之 阅读全文

C# 线程手册 第三章 使用线程

2012-01-29 16:51 by DanielWise, 2884 阅读, 4 推荐, 收藏, 编辑
摘要:概要 在之前章节,我们已经讨论过线程在开发多用户应用程序时扮演的重要角色。我们已经使用线程来解决一些重要的问题,比如让多个用户或者客户端在同一时间访问同一个资源。然而,在学习过程中我们忽略了一个问题,现在到了处理这个问题的时候了:如果一个用户改变了资源的状态,同时另外一个用户也想改变同一个资源的状态的话,会发生什么? 举个例子,假设有一台ATM, 丹尼尔和他夫人决定通过ATM从他们的共同支票账... 阅读全文

C# 线程手册 第二章 .NET 中的线程 线程陷阱

2012-01-18 17:15 by DanielWise, 3061 阅读, 2 推荐, 收藏, 编辑
摘要:我们已经讨论过在程序中使用线程的两个主要优势。然而,在另外一些情况下使用线程会是一个糟糕的决定。很明显,我们并不打算列出一个完整的关于在何时创建新线程的列表,而是告诉你一个糟糕的使用线程的决定都包含哪些内容。主要有两种情况:第一种是当保证程序的执行顺序非常重要时,第二种看起来更像是一个代码中的错误-在一个循环中创建新线程。 再次探访线程的执行程序 回顾一下我们在本章之前部分用来演示从一个线程跳... 阅读全文
上一页 1 2 3 4 5 6 7 8 9 ··· 26 下一页