Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 22.07.2017
Сообщений: 57
1

Почему оператор lock() предназначен для принятия параметров только ссылочного типа?

10.11.2018, 16:46. Показов 1623. Ответов 2
Метки нет (Все метки)

Почему оператор lock() предназначет для принятия параметров только ссылочного типа?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2018, 16:46
Ответы с готовыми решениями:

Почему оператор lock () предназначен только для ссылочных типов?
Почему оператор lock () предназначен для приема только параметров ссылочного типа?

Использование ссылочного типа с ключевым словом lock
Вот код программы using System; using System.Threading; class A { bool flag = false; ...

Передача параметров ссылочного типа: нелогичный результат
привет всем вот статья про https://msdn.microsoft.com/ru-ru/library/s6938f28.aspx,я немного в одно...

Для чего предназначен оператор ^
Доброго времени. Для чего предназначен оператор ^ в Паскале? Например, PGUID=^tGUID; if PByte...

2
Администратор
Эксперт .NET
13795 / 11181 / 4558
Регистрация: 17.03.2014
Сообщений: 22,547
Записей в блоге: 1
10.11.2018, 16:51 2
Лучший ответ Сообщение было отмечено BeardVis как решение

Решение

BeardVis, потому что SyncBlockIndex который используется lock есть только у значений в куче, а это только ссылочные типы.
1
1 / 1 / 0
Регистрация: 22.07.2017
Сообщений: 57
10.11.2018, 18:24  [ТС] 3
Кусок с ХабраЧто хранится в объектах помимо их полей?

У каждого объекта ссылочного типа есть так называемый заголовок (Header), который состоит из двух полей: указатель на тип которым является данный объект (MethodTablePointer), а так же индекс синхронизации (SyncBlockIndex).

Для чего они нужны?

Первое поле необходимо для того, чтобы каждый управляемый объект мог предоставить информацию о своем типе во время выполнения, то есть нельзя выдать один тип за другой, это сделано для безопасности типов. Так же этот указатель используется для реализации динамической диспетчеризации методов, фактически через него вызываются методы данного объекта. Метод Object.GetType фактически возвращает именно указатель MethodTablePointer.

Второе поле необходимо для многопоточного окружения, а именно для того чтобы каждый объект можно было использовать потокобезопасно.

Когда загружается CLR, она создает так называемый пул блоков синхронизации, можно сказать обычный массив этих блоков синхронизации. Когда объекту необходимо работать в многопоточном окружении (это делается с помощью метода Monitor.Enter или конструкции языка C# lock), CLR отыскивает свободный блок синхронизации в своем списке и записывает его индекс в то самое поле в заголовке объекта. Как только объект перестает нуждаться в многопоточном окружение, CLR просто присваивает значение -1 этому полю и тем самым освобождает блок синхронизации.

Блоки синхронизации — это фактически новое воплощение критических секций из С++. Создатели CLR посчитали, что ассоциировать с каждым управляемым объектом структуру критической секции будет слишком накладно, учитывая, что большинство объектов вообще не используют многопоточное окружение.

Источник - https://habr.com/post/188038/
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2018, 18:24

Почему я могу легально получить доступ к private полю у ссылочного типа на класс?
Здравствуйте, я недавно решила написать длинную арифметику по памяти (годовой давности) и как можно...

объединить списки C1 и С2 в один упорядоченный список, изменяя только значения полей ссылочного типа
Задание:_ Во входном файле расположены два набора положительных чисел; между наборами стоит...

Почему при присваивании значения некоторым объектам ссылочного типа копируется не ССЫЛКА, а само значение?
Здравствуйте! Пытаюсь докопаться до сути ссылочных и значимых типов данных. Во многих источниках...

Return возвращает не ссылку для ссылочного типа?
Выполняю очередное задание. Насколько я понимаю смысл - есть классы с переопределенными методами...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.