170 похожих чатов

А зачем создают отдельный объект для lock? Что будет, если я

использую например сам массив?

Может ли от этого повиснуть вся программа? И почему именно?

13 ответов

8 просмотров

Пустой объект, который создали сами проще контролировать. Если этот массив, на который вы лочитесь убегает куда то наружу (отдаётся в свойстве/методе) кто-то снаружи тоже может сделать на него lock. Последствия разнятся от "ой, что-то всё медленно" до "дедлок, всё зависло". Ну и вдруг вы там поле с массивом переназначаете на новый массив? Lock об этом в курсе не будет, он будет держать старый экземпляр

Николай-Threadripper Автор вопроса
SomebodyOdd
Пустой объект, который создали сами проще контроли...

А если я работаю с этим массивом, пока он в Шоке? У меня именно всё зависает, и не знаю как ловить. Похоже deadlock. Но точно знаю, что почти никогда не использовал отдельный объект для lock, но он нигде не должен переназначаться. Не уверен в причине, только подозреваю.

Николай Threadripper
А если я работаю с этим массивом, пока он в Шоке? ...

Просто работать с массивом - не должно давать проблем. Но вы уверены, что чей-то другой код не делает ненужных локов?

Николай-Threadripper Автор вопроса
SomebodyOdd
Просто работать с массивом - не должно давать проб...

А если и делает, то всегда отпускает ведь. 🥺 Могло быть подвисание временное, но не вечное ведь, и сразу всего приложения. При том что всё работает в разных потоках. При попытке приостановить делаг, ничего не происходит.

Николай Threadripper
А если и делает, то всегда отпускает ведь. 🥺 Могло...

Фокус дедлока как раз в том, что возникает ситуация, где никто из участников дедлока ничего не может отпустить, потому что все ждут чуда что отпустит кто-то другой. Доставайте отладчик, смотрите что и где именно виснет. Просто рассуждая о локах вы ничего не решите, нужно искать где

Николай-Threadripper Автор вопроса
SomebodyOdd
Фокус дедлока как раз в том, что возникает ситуаци...

Вот отладчик то и не работает. Как можно отловить такое событие? Наверное, логгировать начало и конец каждого события? Но это не отладка.

Николай-Threadripper Автор вопроса
SomebodyOdd
Что значит, "не работает"?

Ну когда зависание произошло, можно только закрыть программу и всё. Что там происходит невозможно узнать. Пауза не включается

Николай Threadripper
Ну когда зависание произошло, можно только закрыть...

А кто сказал что отлаживать надо когда уже произошло? Ходите по шагам, снимите дамп и посмотрите где потоки зависли, обложите логированием. Столько способов как подступиться к проблеме, какой-нибудь да сработает.

Николай Threadripper
Попробую, спасибо!

Я с помощью ею дебажу потоки https://marketplace.visualstudio.com/items?itemName=Diagnostics.DiagnosticsConcurrencyVisualizer2019

Николай-Threadripper Автор вопроса
AN
Я с помощью ею дебажу потоки https://marketplace.v...

Так просто видеть то не поможет. Но спасибо, может поможет.

Николай Threadripper
Так просто видеть то не поможет. Но спасибо, может...

Если потоки криво неоптимально работают сразу видно

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Карта сайта