多线程
acervogue
这个作者很懒,什么都没留下…
展开
-
C#多线程学习(一) 多线程的相关概念
什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。什么是多线程?多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务转载 2012-04-01 11:18:05 · 260 阅读 · 0 评论 -
C#多线程学习(五) 多线程的自动管理(定时器)
Timer类:设置一个定时器,定时执行用户指定的函数。定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数。初始化一个Timer对象: Timer timer = new Timer(timerDelegate, s,1000, 1000); // 第一个参数:指定了TimerCallback 委托,表示要执行的方法;// 第二个参数:一个包含回调方法要使用的信息的对象转载 2012-04-01 11:23:29 · 302 阅读 · 0 评论 -
C#多线程学习(二) 如何操纵一个线程
下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可。(线程入口使程序知道该让这个线程干什么事)在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者说指向的函数。打开你的VS.转载 2012-04-01 11:18:24 · 289 阅读 · 0 评论 -
浅谈线程池(下):相关试验及注意事项
线程池是.NET中的重要组件,几乎所有的异步功能依赖于线程池。之前我们讨论了线程池的作用、独立线程池的存在意义,以及对CLR线程池和IO线程池进行了一定说明。不过这些说明可能有些“抽象”,于是我们还是要通过试验来“验证”这些说明。此外,我认为针对某个“猜想”来设计一些试验进行验证是非常重要的能力,如果您这方面的能力略有不足的话,还是尽量加以锻炼并提高吧。CLR线程的使用与创建首先,我们准备转载 2012-04-01 11:17:07 · 428 阅读 · 0 评论 -
浅谈线程池(中):独立线程池的作用及IO线程池
我们简单讨论了线程池的作用,以及CLR线程池的一些特性。不过关于线程池的基本概念还没有结束,这次我们再来补充一些必要的信息,有助于我们在程序中选择合适的使用方式。独立线程池上次我们讨论到,在一个.NET应用程序中会有一个CLR线程池,可以使用ThreadPool类中的静态方法来使用这个线程池。我们只要使用QueueUserWorkItem方法向线程池中添加任务,线程池就会负责在合适的时候执转载 2012-04-01 11:15:39 · 323 阅读 · 0 评论 -
浅谈线程池(上):线程池的作用及CLR线程池
线程池是一个重要的概念。不过我发现,关于这个话题的讨论似乎还缺少了点什么。作为资料的补充,以及今后文章所需要的引用,我在这里再完整而又简单地谈一下有关线程池,还有.NET中各种线程池的基础。更详细的内容就不多作展开了,有机会我们再详细讨论这方面的细节。这次,还是一个“概述”性质的,希望可以说明白这方面问题的一些概念。线程池的作用其实“线程池”就是用来存放“线程”的对象池。在程序中,如果转载 2012-04-01 11:14:57 · 267 阅读 · 0 评论 -
『C#基础』多线程笔记「三」计时器
在多线程中,有一个比较特殊的应用,就是计时器(Timer)。我在之前的一篇笔记中说过关于Timer控件的简单用法,这里我再根据一些新找的的内容,进行一些整理与扩展。「『WPF』Timer的使用」命名空间:System.Timers.TimerSystem.Threading.TimerSystem.Windows.Forms.TimerSystem.Web.UI.Tim转载 2012-04-01 11:12:20 · 391 阅读 · 0 评论 -
C#线程进程总结(线程调用带参数的方法)
新建一个线程,执行一个无参无返回值的方法。/// /// 线程调用的方法,无参无返回值/// private void ThreadMethod(){ } 启动线程:using System.Threading;ThreadStart threadStart = new ThreadStart(ThreadMethod);Thread threa转载 2012-04-01 09:25:36 · 750 阅读 · 0 评论 -
『C#基础』多线程笔记「四」线程池
现在到了关于多线最简单使用的最后一篇笔记。无论从什么角度来看,每一项事物都应该有其所在的空间,而对于线程来说,线程池就是它所存在的空间,或者叫容器了。 接下来,看看这个线程池是如何使用的吧!概念:ManualResetEvent,通知一个或多个正在等待的线程已发生事件 ManualResetEvent.Set(),将事件状态设置为终止状态,允许一个或多个等待线程继续 Thr转载 2012-04-01 11:13:10 · 312 阅读 · 0 评论 -
『C#基础』多线程笔记「二」线程同步
文章结构:锁定 监视器 共享资源的同步访问 同步事件和等待句柄 多线程使用准则「MSDN」 锁定无论是程序还是数据库,只要是涉及到并发的问题,都难免会有「锁」的概念。在C#中,使用lock关键字来对某个对象实施加锁的操作。lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。lock调用 publ转载 2012-04-01 11:11:45 · 466 阅读 · 0 评论 -
『C#基础』多线程笔记「一」基本说明
基本概念:一个程序集一个进程 一个进程可以有多个线程,且属于同一个程序集 每一个线程可以视为一个执行流,每一个执行流用于执行一个特定的任务 各个线程的执行是独立的 每个程序集都要有一个主线程 线程使程序能够执行并发处理 线程共享应用程序的资源 线程处理解决了吞吐量和响应性的问题一般用途:可以使用线程处理来监视用户输入,执行后台任务,以及处理并发输入流 辅助线程经常用转载 2012-04-01 11:08:43 · 565 阅读 · 0 评论 -
C#多线程学习(四) 多线程的自动管理(线程池)
在多线程的程序中,经常会出现两种情况:一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应这一般使用ThreadPool(线程池)来解决;另一种情况:线程平时都处于休眠状态,只是周期性地被唤醒这一般使用Timer(定时器)来解决;ThreadPool类提供一个由系统维护的线程池(可以看作一个线程的容器),该容器需要 Windows 200转载 2012-04-01 11:22:51 · 332 阅读 · 0 评论 -
C#多线程学习(三) 生产者和消费者
前面说过,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C#中,关键字lock定义如下:转载 2012-04-01 11:21:01 · 324 阅读 · 0 评论 -
C#多线程学习(六) 互斥对象
如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类。我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上车。而线程与Mutex对象的关系也正是如此,线程使用Mutex.WaitOne()方法等待Mutex对象被释放,如果它转载 2012-04-17 15:19:11 · 691 阅读 · 0 评论