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

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

06.07.2019, 12:25. Показов 8465. Ответов 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
 Аватар для Элд Хасп
16157 / 11277 / 2891
Регистрация: 21.04.2018
Сообщений: 33,162
Записей в блоге: 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
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
07.07.2019, 12:48
Цитата Сообщение от kolorotur Посмотреть сообщение
Нет, это исключительно практические вопросы.
До такой степени практические, что из-за них нет наследования значимых типов в языке.
Как и то что нет смысла лочить на значимых типах и строках из-за текущей реализации рантайма. Да, язык синхронизацию на Value Type не ограничивает, но рантайм делает её бессмысленной. Потому что:
Цитата Сообщение от Cupko Посмотреть сообщение
только у объектов размещенных на куче есть SyncBlock, по которому, собственно, и производится контроль доступа потоков в критическую секцию.
Мы можем сколь угодно рассуждать о наследованиях и синхронизациях в текущих и будущих спецификациях и реализациях, но это факт. И я до сих пор не понимаю, в чем мой первый ответ неверен.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16157 / 11277 / 2891
Регистрация: 21.04.2018
Сообщений: 33,162
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru