日期:2014-05-16  浏览次数:20539 次

多线程中给变量加锁作用
private object _lockFlag = new object();

private bool _threadIsRunning = false;

private bool ThreadIsRunning
{
    get
    {
       lock (this._lockFlag) { return this._threadIsRunning; }
    }
    set
    {
       lock (this._lockFlag) { this._threadIsRunning = value; }
    }
}

private void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    if (this.ThreadIsRunning)
    {
       return;
    }

    this._service.Start();
    this.ThreadIsRunning = false;
}


对于这里的lock不太理解。就是说,当调用this.ThreadIsRunning属性的时候,是怎么判断这个变量有没有被锁住呢?这个变量什么时候开始被锁,什么时候又放开呢???

------解决方案--------------------
在asp.net中,是以多线程的方式处理Page请求的,每次处理都是独立的Page实例,所以一般实例成员很少会用到lock
但是在桌面应用中就不一样了,一般都会用到多线程,这个时候去操作同一个对象时就需要同步