文章分类 -  多线程

摘要:/* * 当一个线程尝试着lock一个同步对象的时候,该线程就在就绪队列中排队。 * 一旦没人拥有该同步对象,就绪队列中的线程就可以占有该同步对象。这也是我们平时最经常用的lock方法。 * 为了其他的同步目的,占有同步对象的线程也可以暂时放弃同步对象,并把自己流放到等待队列中去。这就是Monitor.Wait。 * 由于该线程放弃了同步对象,其他在就绪队列的排队者就可以进而拥有同步对象。 * 比起就绪队列来说,在等待队列中排队的线程更像是二等公民:他们不能自动得到同步对象,甚至不能自动升舱到就绪队列。 * 而Monitor.Pulse的作用就是开一次门,使得一个正在等待队列中的线程升舱到就绪 阅读全文
posted @ 2014-03-31 13:25 xust 阅读(390) 评论(0) 推荐(0)
摘要:获取作为BeginInvoke方法调用的最后一个参数而提供的对象//ar.AsyncState:作为 BeginInvoke 方法调用的最后一个参数而提供的对象 //也就是说 ar.AsyncState 与 BeginInvoke方法的最后一个参数类型和值都是一样的 阅读全文
posted @ 2013-05-13 17:05 xust 阅读(875) 评论(0) 推荐(0)
摘要:很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程。 public void ThreadProc(); Thread thread = new Thread(new ThreadStart(ThreadProc)); thread.IsBackground = true; thread.Start(); 但是很多时候,在新的线程中,我们需要与UI进行交互,在.net中不允许我们直接这样做。可以参考MSDN中的描述: “Windows 窗体”使用单线程单元 (STA) 模型,因为“Windows 窗体”基于本机 ... 阅读全文
posted @ 2013-05-13 17:03 xust 阅读(1173) 评论(0) 推荐(0)
摘要:.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。 .net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程. 阅读全文
posted @ 2013-05-13 13:27 xust 阅读(164) 评论(0) 推荐(0)
摘要:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading ; namespace 多线程 { class 线程元子性 { private static Person per = new Person() ; public static void Main() { for( i... 阅读全文
posted @ 2013-02-01 14:22 xust 阅读(202) 评论(0) 推荐(0)
摘要:如何:使用屏障来使并发操作保持同步 .NET Framework 4 其他版本 此主题尚未评级 - 评价此主题 下面的示例演示如何使用 Barrier 同步并发任务。示例以下程序旨在通过使用一种随机化算法将一个短语的单词打乱排列,从而计算两个线程需要多少迭代(或阶段)才能各自找出自己的解答。在每个线程排列好单词之后,关卡后期阶段操作将比较两个结果,查看完整句子是否以正确的单词顺序呈现。C#VB//#define TRACEusing System;using System.Collections.Generic;using System.Linq;using System.Text;usin. 阅读全文
posted @ 2013-01-30 16:45 xust 阅读(154) 评论(0) 推荐(0)
摘要:SpinLock 结构是一个低级别的互斥同步基元,它在等待获取锁时进行旋转。 在多核计算机上,当等待时间预计较短且极少出现争用情况时,SpinLock 的性能将高于其他类型的锁。 不过,我们建议您仅在通过分析确定 System.Threading.Monitor 方法或 Interlocked 方法显著降低了程序的性能时使用 SpinLock。即使 SpinLock 未获取锁,它也会产生线程的时间片。 它这样做是为了避免线程优先级别反转,并使垃圾回收器能够继续执行。 在使用 SpinLock 时,请确保任何线程持有锁的时间不会超过一个非常短的时间段,并确保任何线程在持有锁时不会阻塞。由于... 阅读全文
posted @ 2013-01-30 14:37 xust 阅读(177) 评论(0) 推荐(0)
摘要:用于并行编程的数据结构 .NET Framework 4 其他版本 此主题尚未评级 - 评价此主题 .NET Framework 版本 4 引入了若干在并行编程中非常有用的新类型,其中包括一组并发集合类、轻量同步基元以及用于迟缓初始化的类型。 您可以将这些类型用于任何多线程应用程序代码,包括任务并行库和 PLINQ。并发集合类 System.Collections.Concurrent 命名空间中的集合类提供了线程安全的添加和移除操作,这些操作能够在可能时随时避免锁,并且锁为必需时使用细粒度锁定。与 .NET Framework 版本 1.0 和 2.0 中引入的集合不同,并发集合类不需... 阅读全文
posted @ 2013-01-30 14:11 xust 阅读(285) 评论(0) 推荐(0)
摘要:嵌套任务和子任务 .NET Framework 4 其他版本 1(共 1)对本文的评价是有帮助 - 评价此主题 嵌套任务就是在另一个任务的用户委托中创建的 Task 实例。 子任务是使用 AttachedToParent 选项创建的嵌套任务。 一个任务可以创建任意数量的子任务和/或嵌套任务,该数量仅受系统资源限制。 下面的示例演示一个父任务,该父任务创建一个简单的嵌套任务。C#VBstatic void SimpleNestedTask(){ var parent = Task.Factory.StartNew(() => { Console.WriteLine("... 阅读全文
posted @ 2013-01-30 10:50 xust 阅读(642) 评论(0) 推荐(0)
摘要:任务并行(任务并行库) .NET Framework 4 其他版本 2(共 2)对本文的评价是有帮助 - 评价此主题 更新:2011 年 3 月顾名思义,任务并行库 (TPL) 基于任务的概念。 术语“任务并行”是指一个或多个独立的任务同时运行。 任务表示异步操作,在某些方面它类似于创建新线程或 ThreadPool 工作项,但抽象级别较高。 任务提供两个主要好处:系统资源的使用效率更高,可伸缩性更好。在后台,任务排队到 ThreadPool,ThreadPool 已使用登山等算法进行增强,这些算法能够确定并调整到可最大化吞吐量的线程数。 这会使任务相对轻量,您可以创建很多任务以启用细化并行. 阅读全文
posted @ 2013-01-30 10:02 xust 阅读(578) 评论(0) 推荐(0)
摘要:1.避免锁定public类型对象。 如果实例可以被公共访问,将出现lock(this)问题。 如有一个类MyClass,该类有一个Method方法通过lock(this)来实现互斥: 1 public class MyClass 2 { 3 publicvoid Method() 4 { 5 lock(this) 6 { 7 ...... 8 } 9 }10 } 如果一个MyClass的实例在不同线程中执行Method方法,可以实现互斥。但如果多个MyClass的实例分别在不同的线程中执行Method方法,互斥将失效... 阅读全文
posted @ 2013-01-28 15:57 xust 阅读(212) 评论(0) 推荐(0)
摘要:随着拥有多个硬线程CPU(超线程、双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论。本文主要是想与园中各位高手一同探讨一下如何使用并发来最大化程序的性能。 多线程和异步操作的异同 多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。 异步操作的本质 所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,... 阅读全文
posted @ 2012-12-29 09:47 xust 阅读(174) 评论(0) 推荐(0)
摘要:如何:使用线程池(C# 和 Visual Basic)Visual Studio 2010其他版本1(共 1)对本文的评价是有帮助-评价此主题“线程池”是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。有关更多信息,请参见线程池(C# 和 Visual Basic)。下面的示例使用 .NET Framework 线程池为介于 20 和 40 之间的十个数字计算Fibonacci结果。每个Fibonacci结果都由Fibonacci类表示,该类提供一个名为ThreadPoolCallback的方法,用于执行计算。将创建表示每个Fibonacci值的对象,Thre 阅读全文
posted @ 2012-12-24 14:40 xust 阅读(253) 评论(0) 推荐(0)
摘要:线程池的介绍及简单实现幸勇,简介:服务器程序利用线程技术响应客户请求已经司空见惯,可能您认为这样做效率已经很高,但您有没有想过优化一下使用线程的方法。该文章将向您介绍服务器程序如何利用线程池来优化性能并提供一个简单的线程池实现。发布日期:2002 年 8 月 22 日级别:初级访问情况 :20507 次浏览评论:9(查看|添加评论- 登录)平均分 (108个评分)为本文评分线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段 阅读全文
posted @ 2012-12-24 14:20 xust 阅读(140) 评论(0) 推荐(0)
摘要:CPU是以时间片的方式为进程分配CUP处理时间的,当一个进程以同步的方式去完成几件事情时,此进程必须完成了第一件事情以后再做第二件事,如此按顺序地向CPU请求完成要做的事情。在此单线程的工作模式下,如果把CUP看作是一共有100个时间片的话,CPU可能一直都只是花了其中的10个时间片来处理当前进程所要做的事情,只是用到了CPU的10%的时间片,而其他时间都白白浪费了,当然,实际上CPU的工作模式还是做完一件事以后再去做另一件事,只是CUP的处理速度非常快,很快就处理完成所请求的情事。 为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而互不干扰,如当前进程要完成三件事情1、2、3,那么 阅读全文
posted @ 2012-12-24 13:44 xust 阅读(948) 评论(0) 推荐(0)
摘要:分清原理:多线程和多任务有何不同? 多任务多任务的概念人们已经比较熟悉了,它是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务。Windows就是一个支持多任务的操作系统,比起DOS的单任务系统,确实方便了许多。 Windows多任务处理采用的是被称为虚拟机(Virtual Machine)的技术。所谓虚拟机实际上指的是由Windows在内存中创建的逻辑微机,由它来运行应用程序。当Windows接受到由鼠标器、键盘、定时器信号或某些I/O操作产生的"事件"后,为该任务分配CPU时间。每个任务 (应用程序)使用由Windows分配的短暂的时间片(Timesl 阅读全文
posted @ 2012-12-24 13:35 xust 阅读(3551) 评论(0) 推荐(0)
摘要:方案一:down voteacceptedHere is a generic solution that allows you to wrap any method in a timeout:http://kossovsky.net/index.php/2009/07/csharp-how-to-limit-method-execution-time/ It uses the useful Thread.Join overload that accepts a timeout in milliseconds rather than manually using timers. The onl. 阅读全文
posted @ 2012-12-21 15:39 xust 阅读(471) 评论(0) 推荐(0)
摘要:问题:System.Timers事件处理程序应当是可重入的Timer组件是基于服务器的计时器,它使您能够指定在应用程序中引发Elapsed事件的周期性间隔。然后可通过处理这个事件来提供常规处理。例如,假设您有一台关键性服务器,必须每周 7 天、每天 24 小时都保持运行。可以创建一个使用Timer的服务,以定期检查服务器并确保系统开启并在运行。如果系统不响应,则该服务可以尝试重新启动服务器或通知管理员。基于服务器的Timer是为在多线程环境中用于辅助线程而设计的。服务器计时器可以在线程间移动来处理引发的Elapsed事件,这样就可以比 Windows 计时器更精确地按时引发事件。基于Inter 阅读全文
posted @ 2012-10-24 13:55 xust 阅读(808) 评论(0) 推荐(0)
摘要:public sealed class Singleton { //线程安全单例实现模式 //Double-Checked Locking 模式 //单例的实例由CLR保证只在首次引用它时才会被创建 /// <summary> /// 多线程情况下控制资源 /// </summary> private static object syncRoot = new Object(); private Singleton() { } private static vola... 阅读全文
posted @ 2012-07-28 19:27 xust 阅读(129) 评论(0) 推荐(0)