一、lock 关键字意义
lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。
二、lock执行过程
假设线程A先执行,线程B稍微慢一点。线程A执行到lock语句,判断obj是否已申请了互斥锁,
判断依据是逐个与已存在的锁进行object.ReferenceEquals比较(此处未加证实),如果不存
在,则申请一个新的互斥锁,这时线程A进入lock里面了。
这时假设线程B启动了,而线程A还未执行完lock里面的代码。线程B执行到lock语句,检查到obj
已经申请了互斥锁,于是等待;直到线程A执行完毕,释放互斥锁,线程B才能申请新的互斥锁并执行
lock里面的代码
三 代码实现
namespace Lock_Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("开始测试静态方法的同步");
for (int i = 0; i < 5; i++)
{
Thread t = new Thread(Lock.incremennt1);
t.Start();
}
Thread.Sleep(5*1000);
Console.WriteLine("开始测成员态方法的同步");