
C#多线程
文章平均质量分 70
shellwin
这个作者很懒,什么都没留下…
展开
-
AutoResetEvent和ManualResetEvent用法
概述:AutoResetEvent和ManualResetEvent从字面意思来讲第一个表示的是自动重置,第二个表示手动重置,它们两都有三个方法Reset(),Set(),WaitOne()。在创建对象的时候有一个bool参数,true表示创建有信号的对象,false表示创建无信号的对象。下面来看一段代码:publicpartialclassForm1 : Form { AutoResetEvent autoResetEvent = null; ManualResetEve原创 2010-08-26 14:00:00 · 1219 阅读 · 0 评论 -
Lock关键字死锁
c#中有个关键字lock,它的作用是锁定某一代码块,让同一时间只有一个线程访问该代码块,下面就我个人而言谈谈lock关键字的原理和其中应注意的几个问题: lock的使用原型是: lock(X) { //需要锁定的代码.... } 首先要明白为什么上面这段话能够锁定代码,其中的奥妙就是X这个对象,事实上X是任意一种引用类型,它在这儿起的作用就是任何线程执行到lock(X)时候,X需要独享才能运 行下面的代码,若假定现在有3个线程A,B,C都执行到了lock(X)而ABC因为此时都占有X,这时ABC就要转载 2010-09-01 14:02:00 · 1149 阅读 · 0 评论 -
C#多线程(四)——Timer的使用
1. Timer类的作用是设置一个定时器,定时执行用户指定的函数,而这个函数的传递是靠另外一个代理对象TimerCallback,它必须在创建Timer对象时就指定,并且不能更改。定时器启动后,系统将自动建立一个新的线程,并且在这个线程里执行用户指定的函数。2. Timer timer = new Timer(timerDelegate, s,1000, 1000);第一个参数指定了TimerCallback代理对象;第二个参数的意义跟上面提到的WaitCallback代理对象的一样原创 2010-09-13 12:59:00 · 1808 阅读 · 0 评论 -
C#多线程(三)——ThreadPool的使用
<br />1. 应用程序中的线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应,这种情况下需要使用ThreadPool。<br />2. ThreadPool可以作为一个线程的容器,ThreadPool类也是一个静态类,你不能也不必要生成它的对象,而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是没有办法取消的。在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠Wa原创 2010-09-10 15:30:00 · 1732 阅读 · 0 评论 -
C#多线程(一)——简介
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多原创 2010-08-31 14:45:00 · 742 阅读 · 0 评论 -
C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序,所以没有加锁的必要,但是在多线程中,为了保持数据的同步,一定要加锁,好在Framework中已经为我们提供了三个加锁的机制,分别是Monitor类、Lock关键字和Mutex类。 其中Lock关键词用法比较简单,Monitor类和Lock的用法差不多。这两个都是锁定数据或是锁定被调用的函数。而Mutex则多用于锁定多线程间的同步调用。简单的说,Monitor和Lo转载 2010-09-02 13:24:00 · 574 阅读 · 0 评论 -
C#多线程(二)——生产者和消费者实例
(1) Consumer表示消费类,其中定义了一个ArrayList表示容器,容器中装的是Goods这个类的对象。主要是方法Consumption,这个是表示消费的方法。具体代码如下:publicclassConsumer { ArrayList container = null; //得到一个容器 public Consumer(ArrayList container) { this.container = c原创 2010-09-07 16:02:00 · 2053 阅读 · 0 评论