Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [C++] Управление памятью (7 стр)

[C++] Управление памятью (7 стр)

Поделиться
Advanced: Тема повышенной сложности или важная.
Страницы: 13 4 5 6 7 8 Следующая »
ZefickПостоялецwww7 дек. 201711:12#90
Suslik
> автор мало того, что теоретически создаёт два одновременно существующих в
> памяти экземпляра с одним мьютексом
  Ну Move это вообще какая-то хрень, у коротой проблемы точно не из-за мьютексов, а просто из-за непродуманной логики. Нельзя просто взять и форкнуть указатель, присвоив ему счётчик 1, если до этого он был равен пяти и надеяться, что всё будет работать.

> он ещё может вызывать перегруженный конструктор с этим же самым мьютексом:
  Решается с помощью std::recursive_mutex. Но у автора таких проблем почему-то и так нет. Я просто не ожидал, что обычный мьютекс в крестах по какой-то причине не рекурсивный.

> который в свою очередь может через цепочку зависимостей деструктора попытаться
> сделать какую-нибудь манипуляцию с этим же мьютексом
  И снова всех спасает std::recursive_mutex. Вообще циклические зависимости пока что единственный способ поиметь неприятности в многопоточке. Но думаю не следует говорить, что это в принципе проблема для систем с подсчётом ссылок, особенно если там нет слабых указателей.

> короче, идея в том, что код, написанный в таком стиле, обязательно рано или
> поздно задедлочится. нельзя просто нашлёпать мьютексов где попало и ждать, что
> это будет нормально работать.
  Нельзя в принципе написать умный указатель в 20 строчек и надеяться, что он будет нормально работать. Проблема прежде всего в этом. А уж мьютексы там или что-то другое это уже дело десятое.

Правка: 7 дек. 2017 11:15

TruthfinderПостоялецwww7 дек. 201711:32#91
Zefick

Мне достаточно просто 3 new было увидеть в конструкторе. Даже объяснять ничего не надо. Неправильно, в топку. new это операция известная своей неторопливостью. А тут их сразу 3. В игровом движке lock/unlock на каждый чих вообще противопоказан. ГДшников массовые вызовы кучи пустых virtual idle не устраивал (искать в этих ваших инетах по статье команды WoT Blitz). А тут постоянное подёргивание mutex. Я так столько всяких НО, что даже до многопоточности можно не докапываться.

ZefickПостоялецwww7 дек. 201711:46#92
Truthfinder
> Неправильно, в топку. new это операция известная своей неторопливостью. А тут их сразу 3.
  Только при чём здесь дедлоки? Или ты считаешь, что они возникают из-за неторопливых операций?
TruthfinderПостоялецwww7 дек. 201711:54#93
Zefick
> Только при чём здесь дедлоки? Или ты считаешь, что они возникают из-за
> неторопливых операций?

Не понимаю такой терминологии и её связи с дедлоками. Suslik уже написал больше пояснений, чем следовало.

ZabПостоялецwww7 дек. 201712:27#94
Если бы тут только с блокировками проблемы были...
Когда автор после намеков, что у него тут проблемы с распределением памяти, начинает не устранять проблемы, а отбрехиваться, я бы его уволил нафиг, это вообще не программист. Диверсант.

Представьте, как с таким над одним проектом работать... Другим программистам ему морду бить, что ли? Или все что он написал складывать отдельно и потом выбрасывать?

Правка: 7 дек. 2017 12:32

ZefickПостоялецwww7 дек. 201712:39#95
Truthfinder
> Не понимаю такой терминологии и её связи с дедлоками.
  Что же такого произошло, что на прошлой странице всё ещё было очевидно, а сейчас уже непонятно?
TruthfinderПостоялецwww7 дек. 201712:52#96
Zefick
>   Что же такого произошло, что на прошлой странице всё ещё было очевидно, а
> сейчас уже непонятно?

Приведите мою цитату с прошлой страницы, где я писал, что дедлоки возникают из-за неторопливых операций?

Правка: 7 дек. 2017 12:52

ZefickПостоялецwww7 дек. 201713:21#97
Truthfinder
> Приведите мою цитату с прошлой страницы, где я писал, что дедлоки возникают
> из-за неторопливых операций?
  Ну конкретно причину, в которой ты видишь дедлоки мы узнали только на этой странице.
Толковым пацанам очевидно.
Толковые пацаны уже для себя всё доказали. Спорить смысла нет
...
Мне достаточно просто 3 new было увидеть в конструкторе.
TruthfinderПостоялецwww7 дек. 201713:33#98
Zefick
> Ну конкретно причину, в которой ты видишь дедлоки мы узнали только на этой
> странице.

Где там написано, что 3 new это причина дедлока?

зато там написано
> ... так столько всяких НО, что даже до многопоточности можно не докапываться.

Для тех, кто на ручничке, поясняю. Это значит, что класс написан плохо даже для однопоточных приложений, и его надо переписывать. В однопоточных приложениях дедлока нет по определению. Дедлоки ты обсуждал со Стасом и Suslik'ом. Но никак не со мной. Ибо обсуждать там нечего. Сначала хотя бы однопоточный вариант увидеть адекватный.

Правка: 7 дек. 2017 13:34

ZefickПостоялецwww7 дек. 201715:35#99
Truthfinder
> Дедлоки ты обсуждал со Стасом и Suslik'ом. Но никак не со мной.
  Если ты хотел просто потрындеть в воздух, то не обязательно было упоминать мой ник в постах, тогда бы я знал, что на них просто не стоит обращать внимания. А комментировать капитанские посты про то, что умные указатели в крестах тормозят у меня в планах на сегодня не было.

Правка: 7 дек. 2017 15:36

SuslikМодераторwww7 дек. 201715:41#100
всегда радовала позиция жаба-плебеев, радующихся, что у них язык настолько тормозной, что о производительности виртуальных вызовов и gc нет смысла и задумываться :D

Правка: 7 дек. 2017 16:58

TruthfinderПостоялецwww7 дек. 201715:46#101
Zefick
>   Если ты хотел просто потрындеть в воздух, то не обязательно было упоминать
> мой ник в постах, тогда бы я знал, что на них просто не стоит обращать
> внимания. А комментировать капитанские посты про то, что умные указатели в
> крестах тормозят у меня в планах на сегодня не было.

Правила форума не обязывают обращать на посты внимание даже при наличии в них твоего ника.

HardMorgПостоялецwww7 дек. 201718:18#102
А никого не смущает что нигде не освобождается память под мютекс и каунтер, тоесть если создать хотя бы один такой обьект уже будет течь память
{
    cPtr< ... > p;
} <--  тут уже потечет память
HardMorgПостоялецwww7 дек. 201718:53#103
Zefick
cPtr operator=(cPtr oper) { mt->lock(); if (*count > 0) { *count--; if ((*count == 0) && (obj != nullptr)) delete obj; } mt->unlock(); cPtr(oper); };

в этой строчке delete obj; Если в деструкторе бросится исключение, мютекс больше никто не освободит - может привести к дедлоку( да я знаю что исключения в деструкторе это очень плохо, но мы живем не в идеальном мире где все хорошо). Вообще люди придумали std::lock_guard  что бы не анлокать руками мютекс, везде где есть анлок руками рано или поздно может привести к дедлоку, если не сейчас, то возможно потом( например допишется какой-то  код еще ), вообще накой хрен тут нужен мютекс? он синхронизирует только доступ к каунтеру, может лучше сделать атомарную переменную?

Этот код вообще не безопасен к исключениям, например в конструкторах три вызова new... что если после первого вызова, второй или третий вызов бросит исключение?

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

Проблема не в том что автор не знает, а в том что автор не хочет учиться когда ему говорят как правильно, все мы когда-то начинали с основ и думаю тут найдутся люди которые реально могут помочь, обьяснить и тд, но автору это не нужно, ему главное запостить кусок своего *****кода, а дальше разбирайтесь сами. Есть подозрение, что автор троль )

Правка: 7 дек. 2017 18:56

ZefickПостоялецwww7 дек. 201719:51#104
HardMorg
> cPtr operator=(cPtr oper) { mt->lock(); if (*count > 0) { *count--; if ((*count
> == 0) && (obj != nullptr)) delete obj; } mt->unlock(); cPtr(oper); };
> в этой строчке delete obj; Если в деструкторе бросится исключение, мютекс
> больше никто не освободит
  То есть возможность плохих последствий после выброса исключений для тебя более критично, чем то, что эта функция в принципе даже ничего не возвращает, хотя должна? :)
Страницы: 13 4 5 6 7 8 Следующая »

/ Форум / Программирование игр / Общее

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр