日期:2014-05-17  浏览次数:20821 次

问个Lock锁线程的问题
int i=1;
lock(A)
{
  i=2;
  i=S();
}

internal int S()
{
  lock(A)
  {
     return i=3;
  }
}

这个代码,函数S是否会被执行?

按我的理解就是说lock已经通过object A锁定着,可是然后S还是想要通过A来lock过程,所以最终得到的i是多少?

说白了,我的期望是在S里边锁定一个变量,但是这个变量在前面也会被使用着

------解决方案--------------------
引用:
说白了,我的期望是在S里边锁定一个变量,但是这个变量在前面也会被使用着

你误解了lock的意思。

lock(A)的意思是说,有一个锁,它跟变量A(所引用的对象)关联。根本不是什么“锁着A”的意思。

因此一个 lock(A)就会跟另外一个lock(A)互斥,就会阻塞线程执行。直到再也没有锁跟A关联了(另外一个与A关联的锁释放了),才会获得锁,从而继续执行。

因此lock(A)其实也不过是一个简单的“同步信号”概念,根本谈不上“锁变量”那么复杂的概念。