Почему компилятор C# копирует переменную для блокировки?C#

Место общения программистов C#
Ответить
Anonymous
 Почему компилятор C# копирует переменную для блокировки?

Сообщение Anonymous »

Мой исходный код такой:
Object mylock = new object();
void Test()
{
lock(mylock)
{

}
}

Скомпилировано в следующий код
void Test
{
object obj = mylock; // add a temporary variable
bool lockTaken = false;
try
{
Monitor.Enter(obj, ref lockTaken);
}
finally
{
if (lockTaken)
{
Monitor.Exit(obj);
}
}
}

Я хочу знать, зачем добавлять временную переменную, а не использовать исходную переменную напрямую, как показано ниже.
void Test
{
bool lockTaken = false;
try
{
Monitor.Enter(mylock, ref lockTaken); // use original variable directly
}
finally
{
if (lockTaken)
{
Monitor.Exit(mylock); // use original variable directly
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/701 ... or-locking
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»