Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/41: Рейтинг темы: голосов - 41, средняя оценка - 4.78
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124

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

06.07.2019, 12:25. Показов 8596. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему оператор lock () предназначен для приема только параметров ссылочного типа?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2019, 12:25
Ответы с готовыми решениями:

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

Каким образом выполняется оператор "+" для ссылочных типов, если один из операндов равен null
Вопрос может показаться странным, но все же хотелось бы получить ответ. 1) Каким образом выполняется оператор "+" для...

ArrayList для ссылочных типов
Здравствуйте. Правда ли, что при наполнении ArrayList ссылочными типами, то операции boxing/unboxing не выполнятся. Тем самым можно не...

23
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
06.07.2019, 23:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Cupko Посмотреть сообщение
Стек - это не правда? Стек не работает как стек? там прямая адресация к объектам? что не правда то?
Вы о разных стеках говорите.
Cupko, вы пишите за стек Net.
А вам пишут за стек который создаёт процессор при выполнении машинного Call.
Методы C# в конечном итоге переводятся в машинный код. И там метод вызывается командой Call. она автоматически записывает адрес возврата из метода в стек. Туда же записывают параметры метода. Так как это единственное место, которое всегда известно методу.
При обращении к параметрам в методе известна лишь ссылка относительно стека. В каком именно физическом адресе находится сам стек методу неизвестно.

Зная тип параметра и ссылку относительно стека метод может считать нужный параметр. А для того что бы знать относительные ссылки компилятор их должен прописать по типам во время компиляции. Так как это возможно только для типа с известным размером или для ссылки (адреса в памяти), то, соответственно, типы разделяются на те чей размер известен на момент компиляции и тех что неизвестен.

Фактически можно рассматривать так, что на машинном уровне для метода существуют только значимые типы, где адрес это тоже один из значимых типов.

Это всё конечно в упрощённом виде. Для понимания основ.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.07.2019, 04:57
Цитата Сообщение от Cupko Посмотреть сообщение
Ну так же можно выделять требуемую память в начале метода, высчитав предварительно требуемый (максимальный) размер
Нет, нельзя, потому что в начале метода будет неизвестно необходимое количество памяти, которое надо выделить в стеке для переменной значимого типа, т.к. этот размер напрямую зависит от фактического типа, который в нее будет записан, а при входе в метод этой информации нет.

Цитата Сообщение от Cupko Посмотреть сообщение
всё это чисто риторически
Нет, это исключительно практические вопросы.
До такой степени практические, что из-за них нет наследования значимых типов в языке.
2
 Аватар для Cupko
660 / 597 / 171
Регистрация: 17.07.2012
Сообщений: 1,686
Записей в блоге: 1
07.07.2019, 12:48
Цитата Сообщение от kolorotur Посмотреть сообщение
Нет, это исключительно практические вопросы.
До такой степени практические, что из-за них нет наследования значимых типов в языке.
Как и то что нет смысла лочить на значимых типах и строках из-за текущей реализации рантайма. Да, язык синхронизацию на Value Type не ограничивает, но рантайм делает её бессмысленной. Потому что:
Цитата Сообщение от Cupko Посмотреть сообщение
только у объектов размещенных на куче есть SyncBlock, по которому, собственно, и производится контроль доступа потоков в критическую секцию.
Мы можем сколь угодно рассуждать о наследованиях и синхронизациях в текущих и будущих спецификациях и реализациях, но это факт. И я до сих пор не понимаю, в чем мой первый ответ неверен.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
07.07.2019, 13:55
Цитата Сообщение от Cupko Посмотреть сообщение
И я до сих пор не понимаю, в чем мой первый ответ неверен.
Причинно-следственная связь.
Не потому что только у объектов размещенных на куче есть SyncBlock.....
А потому, что только для объектов предусмотрена синхронизация (в текущем рантайме) и поэтому только для них и сделан SyncBlock и т.д..

То есть первична причина реализация синхронизации только для объектов. А SyncBlock - это только инструмент для этой реализации.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2019, 13:55

Особенность копирования данных для ссылочных типов
Доброго времени суток, всем. Ребят, как определить, что у ссылочного типа есть "особенность" при присваивании такого же типа,...

Для чего предназначен оператор ^
Доброго времени. Для чего предназначен оператор ^ в Паскале? Например, PGUID=^tGUID; if PByte 9DWORD (p1)+i)^ <> PByte...

Сравнение ссылочных типов
первый случай понятен , без явного приведения мы сравниваем одинаковое значения по разным ссылкам.(будет true) второй случай тоже...

Инкапсуляция ссылочных типов
Здравствуйте! Имеется такой класс (что-то вроде обёртки). public class ArrayWrapper { private int arr; //Constructor public...

Особенности использования ссылочных типов
Доброе время суток всем.Подскажите по поводу ссылочных типов ,я что то не могу понять.Есть кусок кода : private function...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru