关于C#多线程(关于锁的问题)

public void WaitDone()
{
Monitor.Enter(this);
while ( m_activeThreads>0 )
{
Monitor.Wait(this);
}
Monitor.Exit(this);
}
Monitor.Enter(this);
Monitor.Wait(this);
Monitor.Exit(this);
不是很理解
调用这个方法,这个方法执行的过程上怎样的??流程不是很明了
有没有更详细点的,我不是说你们说的不好,谢谢.我在做抓网页的程序,不知道这方面什么实现比较好

第1个回答  2007-11-27
Monitor.Wait(this);
描 述:释放对象上的锁并阻止当前线程,直到它重新获取该锁。
形 参:要在其上等待的对象。
返回值:如果调用由于调用方重新获取了指定对象的锁而返回,则为 true。如果未重新获取该锁,则此方法不会返回。

Monitor.Exit(this);
描 述:释放指定对象上的排他锁。
形 参:在其上释放锁的对象。
返回值:void

线程调用 Monitor.Enter 将锁定资源,调用 Monitor.Wait 将释放锁然后重新获取(相当于先调用 Monitor.Exit 然后再调用 Monitor.Enter),调用 Monitor.Exit 释放对像上的锁,以便其它线程继续运行
第2个回答  2007-11-27
多线成还是一个很麻烦的问题啊

C#多线程怎么锁定全局变量?
只要加上一下代码就可以了:public static object locker = new object();\/\/添加一个对象作为锁 就是在有修改的时候加上lock lock (locker)\/\/锁 { \/*添加过程*\/ dictionary.Add("...", DateTime.Now); } lock (locker)\/\/锁 { \/*删除过程*\/ dictionary.Remove("..."); } ...

C# Timer lock 多线程 的几点疑问。
以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的。也正是因为这个原因,导致了在Timer的 EventHandler里面进行长时间的阻塞调用,将会阻塞界面响应的后果。第二个关于Lock 如果另外的线程并未使用到LOCK的对象.则双方之间没有任何阻塞,中段,等待的关系 2>Lock锁...

C# Timer lock 多线程 的几点疑问。
也正是因为这个原因,导致了在Timer的 EventHandler里面进行长时间的阻塞调用,将会阻塞界面响应的后果。第二个关于Lock 如果另外的线程并未使用到LOCK的对象.则双方之间没有任何阻塞,中段,等待的关系 2>Lock锁其实指的是以某一个变量为准.如果你的另外一个线程,使用到了LOCK的对象,那么他会在LOCK代码...

C#多线程中lock的用法
此时查找了网上有关线程同步的方法 其实用lock语句锁住递增的那一段即可 而介绍的相关用法为 lock(this){_CurrentNumber=++EmailInfo CurrentNumber;} 本以为这样就可以成功 谁知道还是无效 反复查找才发现没弄清楚lock的用法 因为网上所讲的资料 举的例子比较简单 是直接new 出一个对像 然后为对像的...

C#多线程!为什么Lock不行呢?
lock操作的意思是锁定一个实例,其他线程无法访问这个实例。比如 你在Form的类中创建了一个线程进行以下的处理 private void LoadData(){ lock(this.listBox1){ \/\/ Do something } } 当lock段的逻辑处理完成后这个锁定就会解开的。你调试一下,看看是不是其他线程可以访问listBox1的时候,lock段已经...

C# 线程 当多个线程请求独占锁时是如何分配的
你的thread是sleep的意思吧?在线程处于阻塞等待状态的时候有可能会释放现有的锁,在阻塞结束的时候再锁上。你可以理解你的thread函数是这样实现的:thread(time){ exit(currentLock); sleep(time); enter(currentLock);}

c#多线程list是否需要加锁
c#多线程list需要加锁。根据查询相关公开信息显示,多线程环境中,使用共享资源时,必须采用一种同步机制来确保数据的完整性,这种同步机制就是加锁机制。在C#中,Collection类型(如List)提供了一组同步方法,可以帮助安全的在多线程中使用这些集合类型,但是这些同步方法仅仅是保护系统处理的并行性,而不...

C#多线程 如何锁定静态类中静态方法的参数?
调用方法前用 System.Threading.Semophore 加线程锁,调用结束后释放。

多线程不太了解..请问.. c# 中两个线程同时访问一个静态变量会不会死锁...
线程可以设置优先级,优先级设置高的优先访问。死锁可以通过检索变量是否加锁,如果加锁就等待随机的时间重新尝试加锁的方法解决。

C#多线程 一个缓冲队列,一个生产者线程,一个消费者线程,这两个线程同...
加互斥锁的目的,是解决多线程访问同一资源而产生不可预期的异常,那么你现在是一个线程只负责插入,另一线程负责查询和删除,查询和删除跟插入没有关系的话,那么显然是不需要线程锁的,你要是问隐患的话,那么由于多线程或者多用户的原因,频繁操作几张相关表,可能造成数据库的表死锁。

相似回答