//只有一个线程不会死锁
public void ShowThisAnother(int index)
{
for (int i = 0; i < 5; i++)
{
this._Num++;
int k = i;
lock (this) //在同一时刻只能有一个线程(含主程序和线程)跑下面的代码段
{
Console.WriteLine($"This is i={i} k={k} TestLock_LockTemp{index} Start {Thread.CurrentThread.ManagedThreadId}");
Thread.Sleep(500);
Console.WriteLine($"This is i={i} k={k} TestLock_LockTemp{index} End>>>>> {Thread.CurrentThread.ManagedThreadId}");
if(this._Num < 5)
{
this.ShowThisAnother(index);
}
else
{
break;
}
}
}
}
答案:否。
原因:
lock的定义:
lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放
由定义可知,Lock的本质是针对于多线程的,在属于自己的线程中无须等待对象被释放即可进入临界区,进行任意操作。