问个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里边锁定一个变量,但是这个变量在前面也会被使用着
------解决方案--------------------
你误解了lock的意思。
lock(A)的意思是说,有一个锁,它跟变量A(所引用的对象)关联。根本不是什么“锁着A”的意思。
因此一个 lock(A)就会跟另外一个lock(A)互斥,就会阻塞线程执行。直到再也没有锁跟A关联了(另外一个与A关联的锁释放了),才会获得锁,从而继续执行。
因此lock(A)其实也不过是一个简单的“同步信号”概念,根本谈不上“锁变量”那么复杂的概念。