static object locker = new object();
函数内:
lock (locker)
{
//代码段
money += 100;Console.WriteLine("有人正在投币,后面的请等待……");
Thread.Sleep(200);
Console.WriteLine("目前共筹集"+money+"元\n");
}
说明:
比如说上面这样,当t1执行到lock时,检测发现locker不在锁定列表中,它会记录locker的内存地址,加入到锁定列表,并开始执行lock的锁定代码段;t2再执行到lock时,检测发现locker的内存地址是在锁定列表中的,于是线程等待;t1执行完FunLog到达lock结尾,将locker地址从锁定列表删除;t2检测发现locer已不在锁定列表中,它会记录locker的内存地址,加入到锁定列表,并进入执行lock的代码段。