lock就是把{}中的代码段锁定,防止多个线程同时运行该代码段。
用法:
private void Do()
{
threat t1=new threat(doSomething);
threat t2=new threat(doSomething);
t1.Start();
t2.Start();
}
object locker=new object();
private void doSomething()
{
lock(locker)
{
FunLog() ;
}
}当t1执行到lock时,检测发现locker不在锁定列表中,它会记录locker的内存地址,加入到锁定列表,并开始执行lock的锁定代码段;t2再执行到lock时,检测发现locker的内存地址是在锁定列表中的,于是线程等待;t1执行完FunLog到达lock结尾,将locker地址从锁定列表删除;t2检测发现locer已不在锁定列表中,它会记录locker的内存地址,加入到锁定列表,并进入执行lock的代码段。

已有 4527 位网友参与,快来吐槽:
发表评论