日期:2014-05-19  浏览次数:20734 次

多线程同时下载5个文件时,下载的那段代码里使用了全局变量 的问题!!
我该怎么解决多线程使用全局变量的问题!!
比如代码这里有个i,那里有个K,又是那里有个Y
我每碰到个全局变量,我就象这样子
private   static   ManualResetEvent   allDone   =   new   ManualResetEvent(false);
allDone.Reset();
i++;
allDone.Set();
还有那个同步基元Mutex该怎么用?
lock该怎么用?是不是每次碰到全局就lock他?


------解决方案--------------------
lock(i)
{
}
------解决方案--------------------
取值可以不用Lock,赋值要Lock!
------解决方案--------------------
先把i装箱,再lock
要用int的时候再拆箱,++

lock的原理大概是维护一个数组(栈、集合?),里头存的是引用的地址
线程A lock的时候,先看里头是否有这个地址,如果有,就等待,直到调用lock的线程B结束,再把自己lock后的引用地址加进去,以此达到线程锁定的目的。